4

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

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" />

这不起作用,当休眠尝试执行包含在公式中的查询时,我遇到了 SQL 语法错误。我在不同的地方看到可以使用标准 SQLHQL 访问此属性,但我对它们都失败了。是否有可能Revision仅按日期顺序实现整个实体(我的意思是最后一次修订)?

汇集你的想法!

4

2 回答 2

5

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

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


更新

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

于 2013-04-06T10:20:15.600 回答
1

什么是sql语法错误?您是否尝试用_Id替换id

于 2013-04-04T19:06:00.063 回答