Java Hibernate-从联接表获取数据
请参见以下关系:Java Hibernate-从联接表获取数据,java,hibernate,criteria,Java,Hibernate,Criteria,请参见以下关系: Person { long idPerson; String name; @OneToMany( mappedBy="owner", cascade=CascadeType.ALL, fetch=FetchType.EAGER ) List<Pet> pets; } @Inheritance( strategy=InheritanceType.JOINED ) Pet { long idPet; @ManyToO
Person {
long idPerson;
String name;
@OneToMany( mappedBy="owner", cascade=CascadeType.ALL, fetch=FetchType.EAGER )
List<Pet> pets;
}
@Inheritance( strategy=InheritanceType.JOINED )
Pet {
long idPet;
@ManyToOne
@JoinColumn( name="ID_PERSON", nullable=false )
Person owner;
String name;
}
Cat extends Pet { }
Dog extends Pet { }
Dragon extends Pet { }
我如何使用标准来做呢?一个“解决办法”如下所示:
Criteria criteria = session.createCriteria( Cat.class ).list();
// then manually create a List<Person> and add all the Cat.owner to that list
好吧,如果我使用一个每类表策略,这可能会容易得多,但在我的实际项目中,连接的策略最适合
如果可能的话,出于一些“复杂”的原因,我希望避免使用HQL
提前谢谢 试试这个,这就是在继承中检查类的方法
Criteria criteria = session.createCriteria( Person.class).createAlias("pets", "pet").add(Restrictions.eq("pet.class", Cat.class));
抱歉,在此处出错:
criteria.CreateAlias(“Cat”、“Cat”)
将编译,但它将在运行时引发Hibernate异常,表示未找到属性“Cat”。AmitChotaliya给出的解决方案非常有效,谢谢。
SELECT * FROM PERSON, PET, CAT
WHERE PERSON.ID_PERSON=PET.ID_PERSON AND PET.ID_PET=CAT.ID_PET
AND PERSON.something=...
AND PET.something=...
AND CAT.something=... ( and a lot more... )
Criteria criteria = session.createCriteria( Person.class).createAlias("pets", "pet").add(Restrictions.eq("pet.class", Cat.class));