如何在具有复合 PK 的实体中使用 "findBy" (Hibernate JPA)
How to use "findBy" in an Entity with a Composite PK (Hibernate JPA)
我正在用 bootspring 学习。
findByDate(int date);
在我将 int Date
移到内部 class.
之前一直工作
现在我可以保存新条目,但无法按日期检索它们
我需要更改什么?
@Transactional
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, Long> {
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
}
引发此异常:
org.springframework.data.mapping.PropertyReferenceException: No property date found for type ExpirationDTO!
您应该在存储库中包含嵌入式密钥 class 的名称,而不是 Long。
试试这个(未测试):
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
public List<ExpirationDTO> findByIdDate(int date);
}
findBy
之后 Id
是你的 EmbeddedId
和 Date
是可嵌入的属性 class。还有一件事:如果你只使用嵌入密钥的一部分,你不能期望只有一个结果...
您应该在存储库中包含嵌入式密钥 class 的名称,并添加下划线 (_)
测试如下:
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
public List<ExpirationDTO> findByIdKey_Date(Date date);
}
我正在用 bootspring 学习。
findByDate(int date);
在我将 int Date
移到内部 class.
现在我可以保存新条目,但无法按日期检索它们
我需要更改什么?
@Transactional
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, Long> {
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
}
引发此异常:
org.springframework.data.mapping.PropertyReferenceException: No property date found for type ExpirationDTO!
您应该在存储库中包含嵌入式密钥 class 的名称,而不是 Long。 试试这个(未测试):
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
public List<ExpirationDTO> findByIdDate(int date);
}
findBy
之后 Id
是你的 EmbeddedId
和 Date
是可嵌入的属性 class。还有一件事:如果你只使用嵌入密钥的一部分,你不能期望只有一个结果...
您应该在存储库中包含嵌入式密钥 class 的名称,并添加下划线 (_)
测试如下:
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
public List<ExpirationDTO> findByIdKey_Date(Date date);
}