在Hibernate的一对多中,删除主记录的时候需要级联删除子记录,此时会在一的一方设置cascade='all,delete-orphan',
但是下面这段代码将不会删除子记录,只会把外间设置为null:
UserInfo userInfo = new UserInfo();
userInfo.setId(1);
Email email = new Email();
email.setAccount("test@test.com");
userInfo.getEmails().add(email);
session.update(userInfo);
需要先把UserInfo关联的所有Email对象获取出来,并设置为删除标识(从集合中删除Email对象,Hibernate在提交事务
时即会判断需要删除的记录)
UserInfo userInfo = (UserInfo)session.get(UserInfo.class, 1);
userInfo.getEmails().clear();
Email email = new Email();
email.setAccount("test@test.com");
userInfo.getEmails().add(email);
session.update(userInfo);
上面这段代码在更新时会删除UserInfo已置为删除标识的Email记录。