我有以下关系:
// In A.java class
@OneToMany(mappedBy="a", fetch=FetchType.LAZY)
@Cascade(CascadeType.SAVE_UPDATE)
private List<B> bList;
// In B.java class
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="id_a")
@Cascade(CascadeType.SAVE_UPDATE)
private A a;
我得到了这个例外:
StaleStateException: Batch update returned unexpected row count from update
当我从中删除b后尝试saveOrUpdate
实体a时。
// first delete old b record
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
a.getBList().remove(b);
b.setA(null);
session.delete(b);
// session.clear(); // this would solve my problem, but is it correct??
session.getTransaction().commit();
// then insert new b record
Session session=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
B b=new B();
a.getBList().add(b);
b.setA(a);
session.saveOrUpdate(a);
session.getTransaction().commit(); // this throw exception
这两个操作当然不是同一个方法,是由gui事件触发的。
session.clear
是真正的解决方案吗?我(可能)做错了吗?
删除session.delete(b)
解决了“问题”......那么,正确的方法是什么?