У меня есть следующие отношения:
// 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
Когда я пытаюсь saveOrUpdate
создать объект a после удаления из него b.
// 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)
решает "проблему" ... так, каков правильный путь?