在Hibernate中锁定集合

时间:2011-10-14 01:57:37

标签: java hibernate locking

我有一个会话bean方法,它使用Hibernate将子节点添加到实体的索引集合中。但是,由于可能有多个线程同时访问该方法,在一些奇怪的情况下,重复索引将被分配给不同的子进程(Hibernate中的错误?我不知道)。

为了防止它,我想尝试锁定整个实体以及它的集合,以便其他线程无法修改它而另一个线程正在更新它。我知道我们可以将锁模式设置为实体,但是如何收集?是否可以锁定任何其他交易以免添加新孩子?

请赐教! 提前谢谢。

1 个答案:

答案 0 :(得分:2)

也许您可以尝试使用同步集合包装器。您可以在Collections类(Collections)中使用静态方法。例如:

List<String> myList = Collections.synchronizedList(new List<String>());

对于实体级别的锁定,锁定在实体上的同步代码块应该可以解决问题。

 synchronized (entityInstance) 
 {
    ...
 }