我有一个Detectable带有Revisions集合的类,它们是Hibernate管理的POJO。我还使用 hbm.xml 文件映射了我的实体。当用户转到Detectable管理屏幕时,我希望他将Detectable数据查看到表中,该表还将包含最近Revision完成的工作。但是,只有访问可检测内容的详细信息页面,才能使用完整的修订集。
Detectable
Revisions
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仅按日期顺序实现整个实体(我是指最新修订版)吗?
汇集您的想法!
我终于用以下代码实现了它:
<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我当前的实体密钥列在哪里。
id_detectable
更新
另一个解决方法是使用数据库视图获取最近的修订日期。然后,可以选择将实体映射到该视图而不是原始表。