Java HQL连接:基于2个连接检索对象(连接所需的路径!)
我试图跨越3个对象加入,但遇到了一个问题。这是我的想法。在Java中,我试图获取某个对象的列表:Java HQL连接:基于2个连接检索对象(连接所需的路径!),java,xml,hibernate,join,Java,Xml,Hibernate,Join,我试图跨越3个对象加入,但遇到了一个问题。这是我的想法。在Java中,我试图获取某个对象的列表: List<TypeX> typeXList = session.createQuery( "from X as x " + "join Y as y " + "where y.z in (:zList)") .setParameterList(":zList", zList) .list(); 然而,我认为它们是映
List<TypeX> typeXList =
session.createQuery(
"from X as x " +
"join Y as y " +
"where y.z in (:zList)")
.setParameterList(":zList", zList)
.list();
然而,我认为它们是映射的,在我的xml配置中
<class name="X" table="x">
<cache usage="read-write"/>
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="yId" column="y_id"/>
<many-to-one name="y" column="y_id"
insert="false" update="false" class="Y" lazy="proxy"/>
<!-- I need both of these for other reasons, existing code etc -->
...
</class>
...
现在是Y班
<class name="Y" table="y">
<cache usage="read-write"/>
<id name="id" column="id">
<generator class="native"/>
</id>
<many-to-one name="z" column="z_id" class="Z" lazy="false"/>
...
</class>
...
和Z
...
我想这些就足够根据Z的列表检索X了。我做错了什么?我想一定是
连接X.y,其中
它实际上是y.z,这里涉及两个连接,一个来自代表投票(X)的对象,投票(y)的对象,然后是y(z)的提供者。想想亚马逊上的一个产品评级,X=星级评级对象,Y=被评级的产品,Z=产品的供应商。在本例中,我们试图获得供应商列表的所有投票。@DavidWilliams如果您有一个示例,说明如何在hqlten@Jens中使用jin 2列(项目),我想我已经在上面的XML中提供了所有必需的设置。这不正确吗?@DavidWilliams你写的join Y as Y
我认为这是错误的,如果我理解的例子是正确的,那一定是join x.Y
Awesome,做到了,谢谢,在这种情况下,我把它全部放在wherewhere x.Y.z in(:zs)
<class name="Y" table="y">
<cache usage="read-write"/>
<id name="id" column="id">
<generator class="native"/>
</id>
<many-to-one name="z" column="z_id" class="Z" lazy="false"/>
...
</class>
<class name="Z" table="z">
<cache usage="read-write"/>
<id name="id" column="z_id">
<generator class="native"/>
</id>
...
</class>