如何使用“findBy”在具有复合PK(Hibernate JPA)的实体中 [英] How to use "findBy" in an Entity with a Composite PK (Hibernate JPA)

查看:268
本文介绍了如何使用“findBy”在具有复合PK(Hibernate JPA)的实体中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



findByDate(int date); 用于工作,直到我将 int Date 移到内部类中。



现在我可以保存新条目但我无法通过日期



我需要改变什么?

  @Transactional 
public interface ExpirationDAO扩展了JpaRepository< ExpirationDTO,Long> {

public ExpirationDTO findByDate(int date);
}

 @Embeddable 
public static class IdKey implements Serializable {
@NotNull
int date;
@ManyToOne
ProductDTO产品;

public IdKey(){
}
// setter和getters
}
@EmbeddedId
私人IdKey ID;
@NotNull
int单位;

public ExpirationDTO(){
}
// setters and getters
}

抛出这个异常:

  org.springframework.data.mapping.PropertyReferenceException:No为类型ExpirationDTO找到属性日期! 


解决方案

您应该在资源库中包含嵌入式密钥类的名称龙的。
试试这个(未测试):

  public interface ExpirationDAO扩展JpaRepository< ExpirationDTO,IdKey> {
公共列表< ExpirationDTO> findByIdDate(int date);
}

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


I am learning with bootspring.

findByDate(int date); used to work until I've moved int Date into the inner class.

Now I can save new entries but I can't retrive them byDate

What do I need to change?

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

    public ExpirationDTO findByDate(int date);
}

and

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

throws this exception:

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

解决方案

You should include name of embedded key class in repository instead of Long. Try this one (not tested):

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

There after findBy Id is yours EmbeddedId and Date is attribute of embeddable class. And one more thing: if you use only part of embedded key, you can't expect only one result...

这篇关于如何使用“findBy”在具有复合PK(Hibernate JPA)的实体中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆