我的问题是类似JPA最佳实践问题 - 更新一个字段只
Updating one field in JPA entity
基本上我有其中有一些基本的字段(enum
,String
,DateTime
),它有两个其他领域的实体美孚。其中之一是OneToOne,另一个是使用集合实现的OneToMany。
我有两个线程它们在不同的时间运行,并查找使用findById类型的方法在辛格尔顿的EntityManager包装类相同的实体(我没有写这一点;)
我想什么,以避免是以下情况:
线程1查找一个Foo其中具有1的ID和它得到在该时间点的基准,以与富富的状态。
线程2查找一个Foo其中具有1的ID,并得到一个裁判的Foo与相同的状态的线程1
线程1改变上富字符串字段中,并用合并 线程持续,2更改foo上的Enum字段的值并将其保留为合并结果
上次操作导致更改线程1被替换为线程2得到的旧字段的状态,因为合并正在更新所有内容(除外OneToOne和OneToMany,因为它们的CascadeType是Persist和Remove)。
我所寻找的是建议,以最佳实践方法将防止这种状态重挫当一个人只需要更新以这种方式具体领域的东西。
虽然我有,我认为是在我的帖子顶部的链接中提到的,但它改变了使用现在使用的通用save(Object o)
的东西,它将合并到特定于这种情况下,从实体ID键入的特定字段上执行UPDATE。有没有更好的办法?我目前的持久性提供者是EclipseLink。
TIA
-NBW
你能发表一些代码吗? – 2010-09-11 02:45:55
请参阅[这里]的答案(http://stackoverflow.com/questions/3476613/updating-one-field-in-jpa-entity/18875850#18875850)查看JPA 2.1支持部分实体更新 – 2013-09-18 15:06:42