首页 > 解决方案 > 这个 Hibernate Idiom 线程安全吗?

问题描述

问题

我需要确保在 Thread-A 上修改一组实体时,它们的更改会在 Thread-B 上同步更新。更改也不能阻塞 Thread-A,因此对象是分离的。当 Thread-B 更新实体时,不会对 Thread-A 上的实体进行任何更改。

问题

这个问题的最佳解决方案是什么?如果不是,那是什么?这个成语安全吗?如果是这样,为什么?

代码

第 1 步(线程 A):创建对象并存储在集合中

Collection<MyEntity> collection = ...;

MyEntity entity = new MyEntity();

entity.setValue(1);

collection.add(entity);

第 2 步(线程 B):持久化在线程 A 上创建的对象,然后分离

Session session = ...; // assume initialized

Transaction transaction = ...; // assume initialized

transaction.being();

session.persist(entity);

transaction.commit();

session.detach(entity);

步骤 3 (Thread-A):更新后,允许在 Thread-A 上修改对象。

第 4 步(线程 B):进行更多更改后,更新线程 B。

标签: javahibernate

解决方案


推荐阅读