1
|
Paul Taylor · 技术社区 · 6 年前 |
![]() |
1
1
您遇到的问题与乐观锁定直接相关 您已通过 MusicBrainzReleaseWrapper上的注释。saveOrUpdate确实可以添加或更新实体,但前提是实体版本与您试图添加或合并的分离对象的版本相同。 在您的特定示例中,分离的对象的版本早于数据库中的最后一个版本,因此无法对过时的数据执行该操作。
|
![]() |
2
2
一个实体的hibernate对象有3个状态。他们是: -暂时的或新的 -持久(对象从数据库中获取,并且hibernate会话处于打开状态) 在save or update方法中,它要么保存临时对象,要么更新分离/持久对象。 在您的代码中,您正试图创建Transient/New对象并在其中设置旧的id。这就是你克服错误的原因。首先使用id获取对象,然后更新它的正确方法。 |
![]() |
3
1
|
![]() |
4
1
@在Hibernate(或JPA)术语中,Pavan关于实体是暂时的或分离的说法是正确的。这两种状态都意味着Hibernate在其会话中(在
在您的情况下,显然Hibernate不知道分离的实例,因此您需要使用
对于更新,Hibernate喜欢知道实体的先前状态。如果它使用动态更新(所以不更新所有列),这是有意义的,但否则您会认为它可以直接进行更新。我知道的唯一的选择是直接更新查询(通过HQL或JPQL),但是如果您有一个实体实例,这就不方便了。也许其他人知道怎么做。 |