我有hbm.xml
个文件
<hibernate-mapping>
<class catalog="test_user" name="test.user" table="user">
<id name="id" type="java.lang.Long">
<column name="id"/>
<generator class="identity"/>
</id>
<property name="name" type="string">
<column length="200" name="name" unique="true"/>
</property>
<set fetch="join" inverse="true" lazy="true" name="education" table="user_education">
<key>
<column name="aid"/>
</key>
<one-to-many class="test.UserEducation"/>
</set>
<set fetch="join" inverse="true" lazy="true" name="employment" table="user_employment">
<key>
<column name="aid"/>
</key>
<one-to-many class="test.UserEmployment"/>
</set>
<set fetch="join" inverse="true" lazy="false" name="otherProfiles" table="user_other_profile">
<key>
<column name="aid"/>
</key>
<one-to-many class="test.OtherProfile"/>
</set>
<set fetch="join" inverse="true" lazy="false" name="settings" table="user_setting">
<key>
<column name="aid"/>
</key>
<one-to-many class="test.Setting"/>
</set>
<set fetch="join" inverse="true" lazy="false" name="images" table="user_images">
<key>
<column name="aid"/>
</key>
<one-to-many class="test.Images"/>
</set>
..
..
...
许多表与用户关联我在这里使用fetch="join"
最大表格。
在其他查询中,我必须从其他几个相关表中获取数据,所以我做了
fetch="join"
。
我想执行任务
from user as u
left join fetch u.settings
where u.id=25
我的问题是,当我想从用户获取数据时,它始终从fetch="join"
的所有关联表中获取数据。
我想知道如何只获取相关的连接数据。对于上述查询,当我们为多个表指定fetch="join"
时,不应从其他表中获取来自用户和设置数据的数据。
答案 0 :(得分:1)
你不应该使用fetch =&#34; join&#34;因为EAGER fetching can lead to Cartesian Products and it's not very efficient。
您需要将这些关联设置为lazy="true"
,并且只能以查询为基础获取该关联:
from user as u
left join fetch u.settings
where u.id=25
这样,您只会获取用户及其设置,而无需连接获取其他关联。