Java 批更新从更新中返回意外的行数

Java 批更新从更新中返回意外的行数,java,hibernate,exception,session,transactions,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) p

我有以下关系:

// 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;
当我从实体a中删除b后尝试保存或更新实体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
是真正的解决方案吗?我(可能)做错了吗


删除会话。删除(b)解决了“问题”。。。那么,正确的方法是什么?

奇怪的是@many一侧的@Cascade(CascadeType.SAVE\u UPDATE)(或者更确切地说,两侧都有一个Cascade)。需要@manytone一侧的那个吗?如果没有,我会尝试不用它。
// 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