0
for (int i=0; i<10; i++) {
SomeClass anObj = new SomeClass();
anObj.setField(i);
anObj.setAnotherField("XYZ"+i);
session.save(anObj);
}
session.getTransaction().commit();
是沒有錯誤運行,並添加10行這是我想要的表。 字段是的主鍵SomeClass。
當我移動之外聲明:
SomeClass anObj = new SomeClass();
for (int i=0; i<10; i++) {
anObj.setField(i);
anObj.setAnotherField("XYZ"+i);
session.save(anObj);
}
session.getTransaction().commit();
我收到「SomeClass的實例的標識被改變」的錯誤。
我從中看到的是,Hibernate在將數據保存到數據庫中之後仍然關注對象的關鍵字段 - 甚至在它應該之後,並且在提交時抱怨它。
我希望我應該留在代碼中的對象一旦我保存它,這是沒有道理的。
我想知道它背後是什麼。
有沒有一種方法 - 一個屬性保存()或另一種保存模式來解決這個問題?我不希望在循環的每次迭代中重新聲明anObj。
THX的答案域對象。那麼在這種情況下 - 是否有辦法將對象直接綁定到某種「保存模式」,以便HN在檢測到發生的所有事情的同時,每次發出新的保存信號那個同樣的東西?否則,核心代碼中的所有干擾都不會帶來太大的收益。 – Roam
我會說你應該考慮一下你的代碼的設計模式。通常,Hibernate是在DAO(數據訪問對象)類中實現的。從數據庫中獲取/更新時,只保留實體持久性,否則應用程序始終與分離的實例一起工作(如果對象被修改,則不需要DB操作) – gerrytan
再次感謝。這是一個很好的角度。 – Roam