休眠申请锁父母表多态查询
-
21-09-2019 - |
题
我有两个对象:
public class ParentObject {
// some basic bean info
}
public class ChildObject extends ParentObject {
// more bean info
}
这些表格中的每一个相当于一个目前存在数据库中的表。我使用的休眠查询ChildObject,这将反过来填充的父母对象的价值观。
我已经定义了我的映射文件,因为这样:
<hibernate-mapping>
<class name="ParentObject"
table="PARENT_OBJECT">
<id name="id"
column="parent"id">
<generator class="assigned"/>
</id>
<property name="beaninfo"/>
<!-- more properties -->
<joined-subclass name="ChildObject" table="CHILD_OBJECT">
<key column="CHILD_ID"/>
<!--properties again-->
</joined-subclass>
</class>
</hibernate-mapping>
我可以使用休眠查询的两个表格没有问题。
我用
session.createQuery("from ChildObject as child ");
这是所有基本休眠的东西。然而,本部分,我具有的问题是,我需要申请锁的所有表格的查询。
我可以锁定类型儿童的对象使用的查询。setLockType("儿童"、LockMode.?).然而,我似乎无法找到一种方法的地方锁定在父母表。
我是新来的冬眠,我仍然工作的一些心理障碍。问题是:我可以如何地方锁定在父母表吗?
我想知道,如果有办法解决具有做到这一点没有撤消的多形态结构,我已经设立。
解决方案
你为什么要锁定这两个表?我问是因为这取决于你想要什么做可能有替代方案来实现的,你想要什么。
事情的方式、休眠正常 只有锁的根源表 除非你使用一些外来的数据库/方言。因此,机会是你已经锁定你的 ParentObject
表,而不是 ChildObject
.
更新 (根据的评论):
因为你使用一种异国情调的数据库:-),其并不支持 FOR UPDATE
语法、休眠是锁定的"主要"的表格作为他们指定的查询("主要"在这种情况下正在表映射的实体列出的 FROM
条款,不根本的层次结构-例如 ChildObject
, ,不 ParentObject
).因为你要锁定这两个表,我会建议你尝试下列之一:
- 呼叫
session.lock()
关实体在你已经得到他们的查询。这应该锁定 根 表层结构,但是我不是100%确定它是否会的工作,因为从技术上讲,你想到"升级"锁已经被关押在给定的实体。 试图欺骗通过明确的命名
ParentObject
表,在你的查询和要求锁定模式:String hql = "select c from ChildObject c, ParentObject p where c.id = p.id"; session.createQuery(hql) .setLockMode("c", LockMode.READ) .setLockMode("p", LockMode.READ).list();
不隶属于 StackOverflow