[英]Hibernate - Fetching data from joined table
请参阅以下关系:
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 { }
这不是完整的代码,但是您可以理解...
如您所见, InheritanceType的策略为JOINED 。因此,例如,如果我要检索所有具有Cat
的Person
,则我的SQL将像这样:
SELECT * FROM PERSON, PET, CAT
WHERE PERSON.ID_PERSON=PET.ID_PERSON AND PET.ID_PET=CAT.ID_PET
如何使用“标准”来做? 一个“替代方法”就是这样..:
Criteria criteria = session.createCriteria( Cat.class ).list();
// then manually create a List<Person> and add all the Cat.owner to that list
如果我不需要应用某些限制,则对我来说这很好。
使用criteria.createAlias("Pet", "pet")
无效,因为它将检索所有Person
无论它是否具有Cat
。 和..criteria.createAlias criteria.createAlias("Cat", "cat")
甚至不会编译,因为Person
没有Cat
作为属性。
简而言之,我想达到的目标等同于:
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... )
好吧,如果我使用TABLE_PER_CLASS策略,这本来可以容易得多,但是在我的真实项目中,JOINED是最适合的一种。
如果可能,出于某些“ ..复杂”的原因,我想避免使用HQL。
提前致谢!
试试这个,这是您可以在继承中检查类的方法。
Criteria criteria = session.createCriteria( Person.class).createAlias("pets", "pet").add(Restrictions.eq("pet.class", Cat.class));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.