Hibernate对持久化类的操作非常方便,而级联操作也是功能强大。但是级联操作会带来莫名其妙的问题,下面就提出一个非常微妙的问题,即
hbm文件中定义的集合Set在顺序不同的情况下,对操作会带来不同的影响。下面用一个例子来说明一下该问题。
持久化类描述:
M.hbm.xml:
操作测试:
public static void save(){
M m = new M();
I i = new I();
S s = new S();
i.setM(m);
s.setM(m);
s.setI(i);
Set<I> is = new HashSet<I>();
is.add(i);
Set<S> ss = new HashSet<S>();
ss.add(s);
m.setSs(ss);
m.setIs(is);
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory fac = cfg.buildSessionFactory();
Session sess = fac.openSession();
Transaction tx = sess.beginTransaction();
sess.save(m);
tx.commit();
sess.close();
}
public static void delete(){
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory fac = cfg.buildSessionFactory();
Session sess = fac.openSession();
Transaction tx = sess.beginTransaction();
M m = (M)sess.get(M.class, 1);
sess.delete(m);
tx.commit();
sess.close();
}
}
操作结果正常:
但是删除不正常:
修改M.hbm.xml为:
则删除正常:
但是插入又不正常了:
问题处在何方?为何跟M.hbm.xml里面的set顺序有关系呢?如何统一解决呢?