我有两个 bean,一个是 @Embeddable,其中我有 PK 的组合。
@Embeddable
@JsonIgnoreProperties(ignoreUnknown = true)
public class PersonalInfoId implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "username", nullable = false)
private String username;
@JsonFormat(pattern = "yyyy-MM-dd")
@Temporal(TemporalType.DATE)
private Date end_date;
其他bean是@EmbeddedId,其中我有其他参数
@Table(name = "tblemployee_personal_info0001")
@JsonIgnoreProperties(ignoreUnknown = true)
public class tblemployee_personal_info0001 {
@EmbeddedId
private PersonalInfoId personalInfoId;
private String emp_id;
@JsonFormat(pattern = "yyyy-MM-dd")
@Temporal(TemporalType.DATE)
private Date start_date;
private String last_changed_by;
@Temporal(TemporalType.TIMESTAMP)
private Date last_changed_date;
private String emp_sub_group_key;
private String emp_designation_key;
在存储库界面中,我想编写 native 查询。我尝试过的是
public interface PersonalInfoDataRepository extends JpaRepository<tblemployee_personal_info0001, PersonalInfoId> {
List<tblemployee_personal_info0001> findByPersonalInfoIdUsername(String username);
@Query("SELECT start_date, username FROM tblemployee_personal_info0001"
+ " p WHERE p.start_date=:start_date AND p.username=:userName")
List<Object> find(@Param("start_date") Date start_date, @Param("userName") String userName);
我得到的异常是: 无法解析属性:用户名:com.pa.beans.tblemployee_personal_info0001
How we can write query which will take parameter from both the class or beans?
如有任何帮助,我们将不胜感激。 提前致谢。
最佳答案
这里您没有使用 native SQL 查询。您可以使用 jpql 查询来传递 @EmbeddedId
字段personalInfoId
:
@Query("SELECT p.start_date, p.personalInfoId.username FROM Tblemployee_personal_info0001 p WHERE ...")
(请尝试以大写字母开头并使用驼峰式命名风格:如TEmployeePersonalInfo)
如果有一天您想要它是原生的,您需要在 @Query
注释中对其进行定价:
@Query(nativeQuery = true, value = "SELECT...")
关于java - Spring数据jpa中具有复合PK的表的 native 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406724/