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对一的一方