一尘不染

具有xml映射的Hibernate派生属性

hibernate

我有一个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语法错误。我已经在不同的地方看到可以使用标准SQL来访问此属性,但是我两个都失败了。还可以Revision仅按日期顺序实现整个实体(我是指最新修订版)吗?

汇集您的想法!


阅读 196

收藏
2020-06-20

共1个答案

一尘不染

我终于用以下代码实现了它:

<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我当前的实体密钥列在哪里。


更新

另一个解决方法是使用数据库视图获取最近的修订日期。然后,可以选择将实体映射到该视图而不是原始表。

2020-06-20