我正在使用 Hibernate 3.6.9 作为 ORM 和 xml 映射的 Java 应用程序工作。实际上,有两个实体,Detectable 和Revision,Detectable 与Revision 是一对多的关系,映射整套已完成的修订:
<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/