最近在写一个struts1.0+hibernate的demo
在使用hibernate插入书库对象的时候 出现了
不能插入到数据库的问题
回想在以前都是使用spring+hibernate去集成的插入的 在这里买包括了事务的操作
所以在使用单独的hibernate去操作的时候 页会出现事务的问题
这里贴出我的 代码
public boolean insertUserInfo(UserInfo userInfo) {
Session session = getSession();
//Transaction aa = session.beginTransaction();
Object object = session.save(userInfo);
System.out.println(object);
//aa.commit();
session.flush();
session.close();
if (object != null)
return true;
return false;
}
在这里注释的部分 是后来加的 在加之前h是不可以提交到数据库的 我很郁闷
在网上找了好多 大家也有这样的问题 我只记得 在使用sqlserver2008执行删除的时候 需要 flush一下
这回我是使用的mysql数据库的
在这里贴出网友的博客
测试方法:
Session session = getSession();//取得session
Client client = new Client();
client.setClientName("client");
session.save(client); // 保存
session.close();
当不加入事务的时候执行,在控制台打印sql语句:
Hibernate: insert into chapter6.clients (clientName) values (?)
问题1:
但是查询数据库中并没有添加记录?这是为什么?
但是我用sql手动添加数据时候,发现clientId已经自增了,这又是为什么?
测试方法:
Session session = getSession();
tx = session.beginTransaction();
Client client = new Client();
client.setClientName("client");
session.save(client);
tx.commit();
session.close();
当加入事务的时候,数据插入没有问题,数据库中也可以查询到。
问题2:
session的sava方法必须加入事务才能成功提交吗?
附:数据库mysql5.0
问题补充:
to llade (高级程序员)
System.out.println(session.getFlushMode());打印结果为AUTO,没有设置FlushModel,默认就为AUTO,同时我调用session.flush()同样不能持久到数据库。
但是我用sql手动添加数据时候,发现clientId已经自增了,这又是为什么?
问题补充:
to:wangxin0072000
谢谢你的提示,数据库的autocommit=1;
查询了hibernate官方指南,发现hibernate对自动提交默认为false,必须加入事务手动提交,也可以在hibernate配置文件钟加入属性connection.autocommit并设置为true(不推荐这样),这样不加入事物也可以自动提交,在没有设置改属性之前,如果不加入事物,即使调用session.flush(),数据也不能插入数据库;但还有问题:
为什么数据库中没有插入数据,自增变量的值却自增了;也就是当我在不加入事务和不设置connection.autocommit属性的情况下调用save()方法,数据库没有插入数据,但是我数据库钟设置为auto_increment的字段id的值却自增了,因为当我手动插入数据发现id值已经是2了?
在这里 对于自动增长的问题 我来稍微的分析一下
首先稍微解释一下事务 对于事务来说 事务本省就是数据库的特有名词
当我们在执行一个插入操作的时候 其实数据库已经将这个数据保存起来了,只是没有显示到列表中,当我们如果执行事务去提交的话 他就把这条数据
放在表中,然而如果我们没有提交数据库就会删除这条数据 那么这个自动增长的列就自然会留下来了。
不知道自己的思路是否正确 还请大家多指教。
(个人微信号) (技术公众号)