【问题标题】:get the size of a list in a property获取属性中列表的大小
【发布时间】:2011-01-20 00:30:54
【问题描述】:

我有一个 A 类,它有一个 B 元素列表。

我想在我的 A 课上添加:

int size;

这将用 B 元素的数量来评估。所以当我打电话给myA.getSize() 时,我会得到它。

是否可以在休眠映射中使用单个属性映射计数查询?

我不想加载列表,这就是我想添加 size 属性的原因。

【问题讨论】:

  • 顺便说一句,如果答案对您有用,您必须将答案标记为已接受(通过投票计数器下方的勾号)

标签: java hibernate orm hibernate-mapping


【解决方案1】:

是否可以在休眠映射中使用单个属性映射计数查询?

是的,使用formula

<property name="size" type="integer"
formula="( select count(a.getBs) from A a where a.id = aid )">
</property>

Example: Various Mappings 中的更多示例。

【讨论】:

  • @Pascal:是否可以对 JPA 注释做同样的事情?
  • @Roman Hibernate 有一个 @Formula 注释,但这是对 JPA 的扩展。
【解决方案2】:

另一种方法是在集合上使用 lazy=extra。这在reference documentation 中几乎没有提及,并在here 中进一步解释。

在集合上使用lazy="extra" “智能”收集行为,即一些 收集操作,例如 size(), contains()、get() 等不触发 集合初始化。这是 仅适用于非常大的 收藏。

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 2013-03-20
    • 2012-06-12
    • 2010-11-30
    • 2013-11-06
    • 2021-03-26
    • 2011-04-02
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多