gpt4 book ai didi

java - 使用 xml 映射的 Hibernate 派生属性

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:30 25 4
gpt4 key购买 nike

我有一个 Detectable 类,它带有一个 Revisions 集,它们是 Hibernate 管理的 POJO。我还使用 hbm.xml 文件映射我的实体。当用户转到 Detectable 管理屏幕时,我希望他在表中看到 Detectable 数据,该表还将包含最后完成的 Revision。然而,完整的修订集只能访问可检测的详细信息页面。

我的机会是显示最后修订日期,该日期将作为每个 Detectable 实例的属性单独加载。所以我有类似的东西:

detectable.hbm.xml

<set name="_Revisions" table="trevision" inverse="true" lazy="true">
<key>
<column name="id_detectable" />
</key>
<one-to-many class="com.company.model.tasks.Revision" />
</set>

<property name="_LastRevisionDate"
formula="select max(rev.start_date) from trevision rev where rev.id_detectable = _Id"
type="date" />

这不起作用,当 hibernate 试图执行包含在公式中的查询时,我有一个 SQL 语法错误。我在不同的地方看到可以使用 standard SQL 访问此属性或 HQL但我对他们两个都失败了。还有可能只按日期顺序实现整个 Revision 实体(我的意思是最后一次修订)吗?

集思广益!

最佳答案

我终于用这段代码实现了:

<property name="_LastRevisionDate"
formula="(select MAX(rev.start_date) from trevision rev where rev.id_detectable = id_detectable and rev.status != 'DRAFT')"
type="date" />

id_detectable 是我当前的实体键列。


更新

另一种解决方法是 use a DB view获取最后修订日期。然后,可以选择将实体映射到该 View 而不是原始表。

关于java - 使用 xml 映射的 Hibernate 派生属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15813118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com