sea*_*ges 7 java database hibernate detachedcriteria
我必须修改一个大的Hibernate DetachedCriteria查询来获取一些额外的关联.
我的对象图类似于下面的结构,我想获取与每辆车相关的销售:
<class name="Showroom" table="showroom">
...
<bag name="cars" lazy="false">
<one-to-many class="Car" />
</bag>
...
</class>
<class name="Car" table="car">
...
<set name="sales" lazy="true">
<one-to-many class="Sale" />
</set>
...
</class>
Run Code Online (Sandbox Code Playgroud)
我想做的是:
DetachedCriteria criteria = DetachedCriteria.forClass(Showroom.class);
// ... Existing criteria query code ...
criteria.setFetchMode("cars.sales", FetchMode.JOIN);
Run Code Online (Sandbox Code Playgroud)
但是setFetchMode中的associationPath参数似乎忽略了点表示法,我得到了一个LazyInitializationException:
引起:org.hibernate.LazyInitializationException:懒得初始化角色集合:Car.sales,没有会话或会话被关闭
我一直在搜索,到目前为止没有找到任何例子或信息.在Hibernate文档不提供关于如何获取嵌套协会的例子,以及用于调用setFetchMode的Javadoc似乎表明,我的点标记的方式应该有工作...
任何帮助,将不胜感激.
JB *_*zet 16
DetachedCriteria dc = DetachedCriteria.forClass(ShowRoom.class, "showRoom");
criteria.setFetchMode("showRoom.cars", FetchMode.JOIN);
criteria.createAlias("showRoom.cars", "car", CriteriaSPecification.LEFT_JOIN);
criteria.setFetchMode("car.sales", FetchMode.JOIN);
Run Code Online (Sandbox Code Playgroud)
您无法在条件查询中链接属性.即使在HQL查询中,cars.sales也是无效的,因为它cars指的是一个集合,而不是一个Car的实例.需要加入才能在汽车收藏中引用汽车.这就是createAlias()电话的作用.以上类似于
select showRoom from ShowRoom
left join fetch showRoom.cars car
left join fetch car.sales
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9248 次 |
| 最近记录: |