java - Hibernate 派生实体

标签 java hibernate

我正在使用 Hibernate 3.6.9 作为 ORM 和 xml 映射的 Java 应用程序工作。实际上,有两个实体,DetectableRevisionDetectableRevision 是一对多的关系,映射整套已完成的修订:

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

另请参阅 this similar question我已经发布。我现在想要的是在类(class)的单独字段中获取最后的修订:

<many-to-one name="_LastDoneRevision" column="id_detectable"
            class="com.company.model.tasks.Revision" lazy="false" />

我想用它实现的是总是急切地获取最新版本(我在大多数情况下使用)。除此之外,如果我愿意,我可以获得整套修订,但默认情况下它是延迟初始化的。为实现这一点,可能需要使用自定义查询来完成整个集合的最后修订。

我认为这不能用公式来实现,因为它们只是检索一个值,而不是整个实体。我希望能够以某种方式选择 many-to-one 关系应该具有的内容。

解决方案可能是 to use a view而不是 Detectable 表本身。这样我就可以拥有一个 VDetectable 实体,该实体将映射到 View ,并且 View 可以获得所有原始属性以及对我感兴趣的 Revision 的引用。

无论如何,是否可以仅使用原始实体加载它?

最佳答案

我不保证它的效率甚至是正确的方法,但我已经做过类似的事情......

<many-to-one 
  name="theMaxSetting"
  class="myPath.domain.Setting"             
  formula="(select MAX(s.SETTING_ID) from setting s where s.profile_id = PROFILE_ID)"
/> 

在我的例子中,配置文件有很多设置。公式有点难以正确,但基本上公式返回一个数字,hibernate 使用该数字查找相应的实体。

为了以防万一... Profile.java 现在包含

private Setting theMaxSetting;
//....
//getter / setter

link显示了使用公式的各种示例。一些示例演示了它如何与 sql 查询一起使用,其他示例演示了它可用于返回实体。我不认为有人将它们组合成一个用例,但所有部分都在那里。

关于java - Hibernate 派生实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292935/

相关文章:

java - 使用 HMAC SHA-256 和 Base64Encoder 进行签名

Java MP3 库具有改变音高和速度的能力

java - 在 hibernate 中查询一对多映射

java - 添加到 @ManyToMany 的拥有侧集合时避免选择所有行的最佳实践

java - Hibernate 5 是否支持基于 XML 的实体映射?

java - 什么是更好的 Java Web 应用程序框架(请提出建议)?

java - 垃圾回收"Island of isolation"

java - 无法实例化父类型

database - 是否可以在 Dropwizard 中配置多个数据库连接?

java - Hibernate实体虚拟列错误?