hibernate多次调用save(),却只保存了最后一条记录到数据库,请高手指点

来源:百度知道 编辑:UC知道 时间:2024/05/22 02:32:11
代码:
public void testOrg() {
Session session = null;

try {
session = HibernateUtils.getSession();
session.beginTransaction();

Set<Organization> set = new HashSet<Organization>();

Organization org2 = new Organization();
org2.setName("org2");
set.add(org2);

Organization org3 = new Organization();
org3.setName("org3");
set.add(org3);

Organization org4 = new Organization();
org4.setName("org4");
set.add(org4);

Organization org1 = new Organization();
org1.setName("org1");
org1.setChildren(set);

session.save(org1);
session.clear();
session.save(org2);
session.clear();
session.save(org3);
session.clear();
session.save(org4);

session.getTransaction().commit();
} catch

session.save(org1);
session.clear();
session.save(org2);
session.clear();
session.save(org3);
session.clear();
session.save(org4);
先看你这个地方, 你save了,然后又clear,保存一个,然后消除一个,保存了3个,消除了3个,最后一个没有清除,所以只看到了最后一条保存的记录

session.save(org1);
session.clear();
session.save(org2);
session.clear();
session.save(org3);
session.clear();
session.save(org4);

调用session的save方法的时候,其实并没有把数据insert到数据库
只有当事务提交的时候才真正的将数据插入到库里面
你每次调用session.save();后就调用 session.clear();
所以就导致了你说的那种情况

你调用save()之后只是把数据放到了session的缓存中,并没有提交到数据库,这时你马上就用clear()清空session()缓存,就把数据清掉了。你最后一条没用clear(),所以最后一条插进去了,而且他3条丢了。
save()方法之后可以用flush(),但是不能用clear()。

你还是没能理解hibernate操作数据库的原理!

session缓存中的对象(也叫持久化对象)是和数据库一致的!

session.save(org1); org1从临时对象变成持久化对象
session.clear(); 你清掉了缓存中的所有对象!org1被从数据库删除了!

我不知道你这用的什么关系,是一对多,还是多对一,一般set用在一对多关系中的一的一方,作为成员变量,操作时,只需要用hibernate对一的一方