【问题标题】:Hibernate - how to selectively fetch associated properties?Hibernate - 如何有选择地获取关联的属性?
【发布时间】:2016-08-04 06:31:18
【问题描述】:

我正在使用带有休眠功能的 Spring。

我要获取的对象属于 A 类,它具有属性 - B 类的一组对象,例如

public class A {
private Integer aID;
private Set<B> bs;
private String fieldA1;
private String fieldA2;

// setters and getters
}

public class B {
private Integer bID;
private String fieldB1;
private String fieldB2;

// setters and getters
}

在映射文件中,在 A 类映射标记中,我包含,

<set name="bs" table="TABLE_B">
  <key column="A_ID" />
  <one-to-many class="com.proj.test.B"/>
</set>

现在我想获取 A 对象,其中 bs 内部过滤条件取决于 fieldB1 和 fieldB2 的值。 (不获取所有 B 对象)

有什么建议/答案吗?

【问题讨论】:

  • 您的意思是在获取 A 时要对子对象进行过滤?
  • @aksappy 是的。例如,通常 A 对象有 10 个 b 对象,但现在我想查询 db 以获取该 A 对象,并根据某些条件过滤 b 对象
  • 我不认为你可以使用 Hibernate Criteria API 做到这一点。但是,您可以使用 HQL 或本机查询。

标签: java hibernate spring-mvc


【解决方案1】:

尝试以下方法:

@Query(value = "Select a from A a where a.bs.fieldB1 YOUR_CONDITION")
List<A> findAWithFilteredB();

【讨论】:

  • 这会返回一个 List 或一个用户对象的 Iterable 吗?
  • @AbdullahWasi 我并不是说我想根据 B 的字段过滤 A。我想要的只是在 B 上过滤,得到相同的 A 对象
  • 如果你想过滤掉 B 你可以在 JPQL 中加入一个连接并过滤掉结果。 @Query(value = "Select a from A a left join a.B b where b.fieldB1 YOUR_CONDITION")
猜你喜欢
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 2013-10-04
  • 2014-07-10
相关资源
最近更新 更多