我有一个会话bean方法,它使用Hibernate将子节点添加到实体的索引集合中。但是,由于可能有多个线程同时访问该方法,在一些奇怪的情况下,重复索引将被分配给不同的子进程(Hibernate中的错误?我不知道)。
为了防止它,我想尝试锁定整个实体以及它的集合,以便其他线程无法修改它而另一个线程正在更新它。我知道我们可以将锁模式设置为实体,但是如何收集?是否可以锁定任何其他交易以免添加新孩子?
请赐教! 提前谢谢。
答案 0 :(得分:2)
也许您可以尝试使用同步集合包装器。您可以在Collections类(Collections)中使用静态方法。例如:
List<String> myList = Collections.synchronizedList(new List<String>());
对于实体级别的锁定,锁定在实体上的同步代码块应该可以解决问题。
synchronized (entityInstance)
{
...
}