hibernate 3.2 save 保存失败

 时间太晚了,先记录一下,以备日后整理。

 

今天尝试使用Derby,然后使用MyEclipse默认的hibernate 3.2 构建project,

在save的时候怎么也save不进去值,但是使用findAll等方法没有问题,

so,说明Derby没有问题,数据库连接也没有问题.


经历网上的一番搜索,得知:

hibernate默认是设置AutoCommit为false的,也就是执行增、删、改时,必须手动提交或者开启事务才可以持久化到数据库中。

在程序中可以通过调用:

System.out.println(session.connection().getAutoCommit());

查看hibernate的AutoCommit默认值。


在实际调试的过程中,发现除了设置AutoCommit为true以外,程序中还必须手动调用session.flush()才可以将对象持久化到数据库,

但是网上看别人的例子却没有看到这种说法。。不知道是hibernate3.2的原因,还是有什么其他原因。。

 

那么解决方法有3种:

1【开启事务】:

Session session = getSession();
		Transaction tx = session.beginTransaction(); 
		UserInfo model = new UserInfo();
		session.save(model);
		tx.commit();

2【通过配置文件设置hibernate自动提交(AutoCommit)为ture】:

在hibernate.cfg.xml中的<session-factory>中添加如下设置:

<property name="connection.autocommit">true</property>
在程序中执行增、删、改的操作时,必须执行:
session.flush();

3【程序中设置hibernate自动提交(AutoCommit)为ture】(这种方法经测试,失败):

SessionFactory sf=HibernateSessionFactory.getSessionFactory();
        Session session=sf.openSession();
        try {
			System.out.println(session.connection().getAutoCommit());
			session.connection().setAutoCommit(true);
			UserInfo model = new UserInfo();
	        session.save(model);
	        session.flush();//必须手动清除缓存中的对象
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


经测试,第3种方法,虽然可以设置AutoCommit为true,但是没有正常提交save的对象。

只有使用第二种方法,在配置文件中设置AutoCommit为ture,并使用session.flush,才可以正常体积save的对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值