用entityManager保存數據時報錯以下數據庫
identifier of an instance of xx.entity was altered from xxKey@249e3cb2 to xxKey@74e8f4a3; nested exception is org.hibernate.HibernateException: identifier of an instance of xxentity was altered from xxKey@249e3cb2 to xxKey@74e8f4a3ide
一共存了三張表的數據,使用了事務,前面兩張表存各存1條數據,最後一張表存兩條數據。執行完成後報上面的錯誤。後來把最後一張表實體上的聯合主鍵去掉不報錯,但最後一張表只保存成功1條數據單元測試
太奇怪了。懷疑是事務引發,檢查了是使用的測試
@Transactional(propagation = Propagation.SUPPORTS, rollbackFor = Exception.class)
寫了單元測試,單獨插入最後一張表兩條數據能夠成功插入。spa
最後找到問題關鍵,是由於最後一張表的其中一條數據是從數據庫裏讀取出來的,另一條是新插入的。把讀取的數據copy到新new的實體後問題解決。hibernate
緣由分析 處於Persistent狀態的實體的id, hibernate是不容許修改後雙保存回去。code