1. 程式人生 > >a different object with the same identifier value was already associated with the session異常

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

錯誤資訊:a different object with the same identifier value was already associated with the session......

字面意思:在session中存在識別符號(identifier)相同,物件卻不止一個的情況報出異常。

在網上找資料,這是使用hibernate的一個比較常見的異常,原因在於如果在同方法中多次獲取同一識別符號的物件,並進行update()或者saveOrUpdate()操作的話,在其後獲取的物件進行更新操作就會出現這個異常。

示例:

public void saveXX(){
    Integer id = x;
    Test test = testDao.getById(id);
    
    if(xx){
        Test anotherTest = testDao.getById(id);
        anotherTest.setName("xyz");
        testDao.update(anotherTest);
    }

    test.setSex("xy");
    testDao.update(test);//這行出現問題
}

如果是需要對同一物件進行處理的話,儘量還是不要這樣多次獲取物件分別取進行更新操作。

解決辦法:

1、去掉多次獲取的同一標誌的物件;

2、使用hibernate的merge方法也替換update方法也可以;