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

2022-09-01 11:51:48

我正在学习弹簧。

findByDate(int date);在我搬进内部类之前,一直工作。int Date

现在我可以保存新条目,但我无法按日期检索它们

我需要更改哪些内容?

@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!

答案 1

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

public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
    public List<ExpirationDTO> findByIdDate(int date);
}

后面是你的,是可嵌入类的属性。还有一件事:如果您只使用嵌入式密钥的一部分,则不能期望只有一个结果......findByIdEmbeddedIdDate


答案 2

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

测试如下:

public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
    public List<ExpirationDTO> findByIdKey_Date(Date date);
}

推荐