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

dmo*_*rar 19 java spring hibernate jpa spring-data-jpa

我正在学习bootspring.

findByDate(int date);过去工作,直到我int Date进入内部阶级.

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

我需要改变什么?

@Transactional
public interface ExpirationDAO extends JpaRepository<ExpirationDTO, Long> {

    public ExpirationDTO findByDate(int date);
}
Run Code Online (Sandbox Code Playgroud)

@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
}
Run Code Online (Sandbox Code Playgroud)

抛出此异常:

org.springframework.data.mapping.PropertyReferenceException: No property date found for type ExpirationDTO!
Run Code Online (Sandbox Code Playgroud)

Jav*_*ick 30

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

public interface ExpirationDAO extends JpaRepository<ExpirationDTO, IdKey> {
    public List<ExpirationDTO> findByIdDate(int date);
}
Run Code Online (Sandbox Code Playgroud)

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