1

Possible Duplicate:
Spring + Hibernate : a different object with the same identifier value was already associated with the session休眠 - 用相同的標識符值不同的物體已經與所述會話

相關聯從

@Id 
private int getId(){ 
    return this.id; 
} 

改變實體@id

@Id 
private String getLogin(){ 
    return this.login; 
} 

我收到錯誤:

a different object with the same identifier 
value was already associated with the session 

在web應用程序中沒有改變任何東西。讀取實體,然後更改表單中的某些字段,然後提交後,我嘗試保存或更新實體。隨着int@Id沒有問題,但現在隨着String@Id我通過更新得到上述錯誤或保存實體:

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) 
public void saveOrUpdate(User u) { 
    getHibernateTemplate().saveOrUpdate(u); 
} 

可能是什麼問題呢?

+0

顯示會話中的代碼可能會有所幫助。 – samitgaur 2010-07-17 04:31:32

回答

4

這意味着您正試圖保存或更新具有不唯一或設置自動遞增標識符的分離對象。

如果你想插入一個新的對象,你希望它的id是空的或唯一的,這取決於你是否使用自動增量(null爲自動增量,爲非自增量設置一個唯一值),如果你想更新它,你要確保它連接到上下文。

您可以使用session.merge(object)將對象重新附加到上下文,該對象返回對象的附加版本。

換句話說:

如果你想插入確保被配置爲ID的字段爲空,如果你使用自動增量或都是獨一無二的。

如果您嘗試更新,請確保對象已連接。 您可以通過從數據庫中選擇它(基於您所擁有的字段)進行更改,然後進行更新,或者只調用session.merge(object)方法並接收可以添加的對象的版本然後也更新。

相關問題