Hibernate-具有相同标识符值的不同对象已与会话关联
可能重复:Hibernate-具有相同标识符值的不同对象已与会话关联,hibernate,spring,annotations,entity,validates-uniqueness-of,Hibernate,Spring,Annotations,Entity,Validates Uniqueness Of,可能重复: 从 @Id private int getId(){ return this.id; } 至 @Id private String getLogin(){ return this.login; } 我得到一个错误: a different object with the same identifier value was already associated with the session 在webapplication中,没有任何更改。A读取实体,然后
从
@Id
private int getId(){
return this.id;
}
至
@Id
private String getLogin(){
return this.login;
}
我得到一个错误:
a different object with the same identifier
value was already associated with the session
在webapplication中,没有任何更改。A读取实体,然后更改表单中的某些字段,然后在提交后,我尝试保存或更新实体。使用int
作为@Id
没有问题,但是现在使用字符串作为@Id
我通过更新或保存实体得到上述错误:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void saveOrUpdate(User u) {
getHibernateTemplate().saveOrUpdate(u);
}
可能是什么问题?这表示您试图保存或更新分离的对象,该对象具有非唯一标识符或设置的自动递增标识符
如果要插入新对象,则希望其id为空或唯一,具体取决于是否使用自动递增(自动递增为null,非自动递增为唯一值),如果要更新该对象,则需要确保该对象已附加到上下文
您可以使用session.merge(object)将对象重新附加到上下文,它返回对象的附加版本
换言之:
如果尝试插入,请确保配置为Id的字段为空(如果使用自动递增),或者是唯一的
如果尝试更新,请确保对象已附着。
您可以从数据库中选择它(基于您拥有的字段),进行更改,然后更新,或者只调用session.merge(对象)方法并接收对象的附加版本,然后您也可以对其进行更新。这表示您正在尝试保存或更新分离的对象,该对象具有非唯一或设置的自动递增标识符
如果要插入新对象,则希望其id为空或唯一,具体取决于是否使用自动递增(自动递增为null,非自动递增为唯一值),如果要更新该对象,则需要确保该对象已附加到上下文
您可以使用session.merge(object)将对象重新附加到上下文,它返回对象的附加版本
换言之:
如果尝试插入,请确保配置为Id的字段为空(如果使用自动递增),或者是唯一的
如果尝试更新,请确保对象已附着。
您可以通过从数据库中选择它(基于您拥有的字段),进行更改,然后更新,或者只调用session.merge(object)方法并接收附加版本的对象,然后再进行更新。在会话中显示代码可能会有所帮助。在会话中显示代码可能会有所帮助。