Hibernate派生属性与xml映射

时间:2013-04-04 13:46:38

标签: java hibernate pojo

我有一个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 SQLHQL来访问此属性,但我对它们都失败了。是否有可能按日期顺序实现整个Revision实体(我的意思是最后修订版)?

汇集您的想法!

2 个答案:

答案 0 :(得分: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是我当前的实体键列。


<强>更新

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

答案 1 :(得分:1)

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