有没有办法在不创建任何接口或DTO类的情况下选择特定列并使它们成为实体?

问题描述 投票:0回答:1

我只想从表中选择一些特定的列。我希望将结果作为实体接收,而不创建任何接口或 DTO 进行投影。

这是我的实体和查询

@Getter
@Setter
@Table(name = "member")
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MemberEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_num")
    private Integer memberNum;

    @Column(name = "member_id")
    private String id;

    @Column(name = "member_password")
    private String password;

    @Column(name = "member_name")
    private String name;

    @Column(name = "member_email")
    private String email;

    @Column(name = "member_phone")
    private String phone;

    @Column(name = "member_student_num")
    private String studentNum;

    @Column(name = "member_type")
    private String type;

    @Column(name = "member_refresh_token")
    private String refreshToken;

    @Column(name = "member_dormitory")
    private Integer dormitoryNum;
}
@Query(value = "SELECT new com.project.myProject.member.domain.entity.MemberEntity(,,m.member_password,,,,,,m.member_refresh_token,) FROM myProject.member as m WHERE m.member_id = :memberId", nativeQuery = true)
    MemberEntity findByMemberId(@Param("memberId") String memberId);

当我运行此查询时发生错误。

2023-11-05T22:55:32.027+09:00 ERROR 58940 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper :您的 SQL 语法有错误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行 '.project.myProject.member.domain.entity.MemberEntity(,,m.member_password,,,,,,m.me' 附近使用的正确语法

org.springframework.dao.InvalidDataAccessResourceUsageException:执行 SQL 时出现 JDBC 异常 [SELECT new com.project.myProject.member.domain.entity.MemberEntity(,,m.member_password,,,,,,m.member_refresh_token,) FROM myProject.member as m WHERE m.member_id = ?] [您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行 '.project.myProject.member.domain.entity.MemberEntity(,,m.member_password,,,,,,m.me' at line 1] 附近使用的正确语法[不适用];SQL [不适用]

这是我尝试过的

  1. 将MemberEntity类中的@NoArgsConstructor、@AllArgsConstructor替换为@RequiredArgsConstructor
  2. 更改 “新 com.project.myProject.member.domain.entity.MemberEntity(, , m.member_password, , , , , , m.member_refresh_token, )”“新 com.project.myProject.member.domain .entity.MemberEntity(m.member_password, m.member_refresh_token)" 查询中
java spring spring-boot spring-data-jpa spring-data
1个回答
0
投票

根据您提供的信息,我可以建议您执行下一种方法之类的操作。

MemberEntity
中创建一个符合您对字段要求的构造函数。

public class MemberEntity {
     
     //fields
       ...
      public MemberEntity(String password, String refreshToken) {
        this.password = password;
        this.refreshToken = refreshToken;
      }
}

要知道查询是否是本机查询,它不能使用框架功能(DTO 投影)或其他任何内容,基于它,现在的查询应该是下一个。

  @Query(value = "SELECT new com.project.myProject.member.domain.entity.MemberEntity(m.password, m.refreshToken) FROM MemberEntity m WHERE m.id = :memberId ")
  MemberEntity findByMemberId(@Param("memberId") String memberId);

我应该解决你当前的问题。

© www.soinside.com 2019 - 2024. All rights reserved.