1
我解決了我的問題,但我只是想更好地理解事情是如何工作的。Hibernate會話跟蹤對象
我正在循環訪問一個集合,創建/初始化一個新產品,向它的集合添加一個類別(映射爲m:m),然後保存並提交事務。
for(Blah b : blahs)
{
session = getcurrensession();
Product p = new Product(1,2,3,4,5);
Category c = Dao.GetById(b.categoryId);
session.beginTransaction();
p.getCategories().add(c);
session.save(p);
session.gettransaction.commit();
}
現在我得到一個錯誤,指出有相同ID的另一個對象已被跟蹤,因此出現了重複錯誤怎麼回事。
我想這是該類別的對象,實際上這就是問題所在,所以我這樣做:
Category c = null;
forloop
{
..
if(c == null || c.getId() != b.categoryId)
c = Dao.GetById(b.categoryId);
...
}
所以現在沒有加載類,除非它有不同的ID,現在我的計劃工作精細。
這個問題是,是否有另一種方法來做到這一點?
我可以強制Hibernate停止跟蹤該對象,所以我可以加載它而不必擔心這些問題?
您的DAO是否使用與上述迭代代碼相同的ISession? ISession是一個UOW - 工作單元,我有一種感覺,你有2個工作單元正在進行。 – David 2010-01-08 20:40:01
我的DAO使用Session session = HibernateUtil.getSessionFactory()。getCurrentSession(); 所以我認爲這是本屆會議,但我猜不是? – mrblah 2010-01-08 21:12:23