我只想从表中选择一些特定的列。我希望将结果作为实体接收,而不创建任何接口或 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 [不适用]
这是我尝试过的
根据您提供的信息,我可以建议您执行下一种方法之类的操作。
在
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);
我应该解决你当前的问题。