Hibernate派生属性与xml映射

Xtr*_*ica 4 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" />
Run Code Online (Sandbox Code Playgroud)

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

汇集您的想法!

Xtr*_*ica 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" />
Run Code Online (Sandbox Code Playgroud)

id_detectable我当前的实体键列在哪里.


UPDATE

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