如何在具有复合PK的实体中使用“findBy”(Hibernate JPA)

我正在学习bootspring。

findByDate(int date); 过去工作,直到我将int Date移动到内部类。

现在我可以保存新条目,但是我无法通过日期对它们进行检索

我需要改变什么?

 @Transactional public interface ExpirationDAO extends JpaRepository { public ExpirationDTO findByDate(int date); } 

 @Embeddable public static class IdKey implements Serializable{ @NotNull int date; @ManyToOne ProductDTO product; public IdKey(){ } //setters and getters } @EmbeddedId private IdKey id; @NotNull int units; public ExpirationDTO(){ } //setters and getters } 

抛出此exception:

 org.springframework.data.mapping.PropertyReferenceException: No property date found for type ExpirationDTO! 

您应该在存储库中包含嵌入式密钥类的名称而不是Long。 试试这个(未测试):

 public interface ExpirationDAO extends JpaRepository { public List findByIdDate(int date); } 

之后findBy Id是你的EmbeddedIdDate是embeddable类的属性。 还有一件事:如果你只使用嵌入式密钥的一部分,你不能指望只有一个结果……

您应该在存储库中包含嵌入式密钥类的名称,并添加下划线(_)

测试如下:

 public interface ExpirationDAO extends JpaRepository { public List findByIdKey_Date(Date date); }