Java 这个Hibernate习惯用法是线程安全的吗?

Java 这个Hibernate习惯用法是线程安全的吗?,java,hibernate,Java,Hibernate,问题 我需要确保在线程a上修改一组实体时,它们的更改在线程B上同步更新。这些更改也不能阻止线程a,因此对象被分离。当线程B更新线程A上的实体时,不会对其进行任何更改 问题 这个问题的最佳解决方案是什么?如果没有,是什么?这个成语安全吗?若然,原因为何 代码 步骤1(线程A):创建对象并存储在集合中 Collection=。。。; MyEntity实体=新的MyEntity(); 实体设置值(1); 集合。添加(实体); 步骤2(线程B):保留在线程A上创建的对象,然后分离 会话=…;//假定已

问题

我需要确保在线程a上修改一组实体时,它们的更改在线程B上同步更新。这些更改也不能阻止线程a,因此对象被分离。当线程B更新线程A上的实体时,不会对其进行任何更改

问题

这个问题的最佳解决方案是什么?如果没有,是什么?这个成语安全吗?若然,原因为何

代码

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

Collection=。。。;
MyEntity实体=新的MyEntity();
实体设置值(1);
集合。添加(实体);
步骤2(线程B):保留在线程A上创建的对象,然后分离

会话=…;//假定已初始化
事务处理=…;//假定已初始化
事务。being();
会议(实体);
commit();
会话.分离(实体);
步骤3(线程A):更新后,允许在线程A上修改对象


步骤4(Thread-B):进行更多更改后,更新Thread-B。

不要考虑这是否是线程安全的,请考虑您实际试图实现的目标,并详细说明。“修改线程A中的实体并在线程B中持久化更改”——这似乎很奇怪,而且容易出错。在我看来,提供了足够的信息来回答这个解决方案是否可行。好吧,根据提供的信息,我会说解决方案不可行。为什么?因为我们不知道您希望如何确保不会有任何并发修改,这些线程实际上在做什么,以及它们是如何协调的。对我来说,这感觉像是一个问题,但如果你认为有足够的信息,并且你的总体方案是合理的,那么就去尝试它。这肯定可以被认为是一个关于解决方案的问题,而不是一个问题,但这是我要问的习惯用法,而不是我的实现。问题是这个成语是否安全可行。为了确保没有并发修改,只有当某些内部(可能是瞬态)状态被设置为修改所需的值时,对象才是可修改的。好吧,如果正确实现,这个习惯用法可能是安全的,并且可能是可行的,但不需要了解更多有关问题的信息。这感觉太复杂了,我想说你需要很好的理由来让这样的模式可行。