【问题标题】:Hibernate derived property with xml mapping带有 xml 映射的 Hibernate 派生属性
【发布时间】:2013-03-26 15:21:50
【问题描述】:

我有一个 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" />

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

集思广益!

【问题讨论】:

    标签: java hibernate pojo


    【解决方案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 是我当前的实体键列。


    更新

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我试过了。 sql语法错误与公式中编写的查询有关,不再提供更多信息。我找不到更多关于派生属性的信息,但是这个link 表明也可以使用 hql。我会检查的。
      • 我刚刚查看了我们应用程序中的一些公式属性,它们都包含在括号中:formula="(...)"。可能值得一试。
      • HQL 还是 SQL?如何通过列名或属性引用当前实体的 id?
      • SQL。列名和属性相同,id
      • 没问题。括号修复了吗?
      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多