当前位置: 首页 > 知识库问答 >
问题:

在Hibernate中用DetachedCriteria快速提取嵌套对象

宿楚青
2023-03-14

我必须修改一个大型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>
DetachedCriteria criteria = DetachedCriteria.forClass(Showroom.class);
// ... Existing criteria query code ...
criteria.setFetchMode("cars.sales", FetchMode.JOIN);

原因:org.hibernate.LazyInitializationException:未能懒散地初始化角色的集合:Car.Sales,没有会话或会话关闭

我四处搜寻,到目前为止没有找到任何例子或信息。Hibernate文档没有提供关于如何获取嵌套关联的示例,而setFetchMode的Javadoc似乎暗示我的点标记方法应该已经奏效了...

如有任何帮助,我们将不胜感激。

共有1个答案

谯乐池
2023-03-14
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);

不能在条件查询中链接属性。即使在HQL查询中,cars.sales也是无效的,因为cars引用的是集合,而不是car的实例。为了能够引用Car集合中的Car,连接是必要的。这就是createAlias()调用的作用。上面类似于

select showRoom from ShowRoom
left join fetch showRoom.cars car
left join fetch car.sales
 类似资料:
  • 我正在编写一些使用放心及其静态编程语言扩展的测试来测试一些简单的Spring MVCendpoint。我正在尝试了解如何提取值。 一个endpoint返回<code>BookDetailsView < code>BookDetailsView是一个非常简单的Kotlin数据类,只有一个字段: 对于单个对象终结点,我有: 这与预期的一样,但尝试对<code>页应用相同的技术 我尝试了各种排列,如下面

  • 我有一个简单的查询很好地工作了一段时间,现在我将代码中的一些内容改为: (hibernate.cfg.xml) 和以下代码: 提交后,result对象不会加载列表(即从开始) 如果我执行在提交前,它会保持加载状态,而且,如果我使用它工作得很好。(但这不是它应该如何工作(让它在使用时打开并加载),createAlias应该一如既往地正常工作) 看起来DetachedCriteria的createAl

  • 问题内容: 因此,给定对象的JSON数组: 我想从nested中提取键/值的子集,同时保持外部对象的其他属性不变,产生如下结果: 即删除除和以外的所有键。 我确信必须有一种使用jq实现此目标的合理简便的方法。帮助表示赞赏。 问题答案: 您可以使用以下过滤器: 这会映射数组中过滤对象的每个项目,仅包括和属性。

  • 我试图建立一个方面的导航使用elasticsearch为一个电子商务网站。 商店产品可以有多个变体。我想到的文档结构如下所示: 我将变体定义为嵌套类型。这样,以下查询将返回包含匹配筛选器的变体的所有文档: 现在,我真的希望获得与过滤器匹配的变体的id,以便在类别页面上显示该产品的变体。因此,在本例中,我希望返回第二个变量(1_b)的id。我只获取ResultSet中返回的文档的id。有什么方法可以

  • 问题内容: 我有两个结构: 它代表我的自定义PostgreSQL对象类型(我自己创建): 下一个结构是DB中的表: 我的自定义对象嵌套在Client类型中,名为。我尝试通过以下方式读取数据: 但不幸的是,我无法读取字段(具有默认值)。我不想使用google_account创建单独的表,也不希望将此结构作为客户端表中的单独字段或将其打包为json(创建单独的实体,因为该结构不仅在此表中使用,而且我正

  • 我有一门java课 在上面的场景中,示例具有子示例,这又是示例列表。此嵌套可以是 n 级。我想实现的是有一个示例列表,即扁平化上面的对象并将所有示例收集到最终列表中(收集所有n级示例)。一个明显的方法是递归。在Java中有什么方法可以更有效地实现它。我尝试了一些java 8概念,但它们不符合要求。