批量更新从更新返回了意外的行数

时间:2010-06-19 21:20:55

标签: java hibernate exception session transactions

我有以下关系:

// 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)解决了“问题”......那么,正确的方法是什么?

0 个答案:

没有答案