如何在具有复合 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 是你的 EmbeddedIdDate 是可嵌入的属性 class。还有一件事:如果你只使用嵌入密钥的一部分,你不能期望只有一个结果...

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

测试如下:

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