Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?
求大神讲解下
Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?
------最佳解决方案--------------------你会结贴不呢?
原因是数据源conn默认的提交方式,hibernate封装的jdbc,因为jdbc默认是的conn提交方式是true
这样 就应该不能提交了
public static void main(String[] args) throws Exception {
SessionFactory sf=HibernateSessionFactory.getSessionFactory();
Session session=sf.openSession();
System.out.println(session.connection().getAutoCommit());
session.connection().setAutoCommit(false);
User u=new User();
u.setName("aaa");
session.save(u);
}
------其他解决方案--------------------不配置主键生成策略会报错吧???
------其他解决方案--------------------大家顶起来了啊
一直理解<generator class="native"/>只是主键生成策略,为了便于移植底层数据库才用native的吗?怎么会和事务有关系
需要测试下
------其他解决方案--------------------你是getCurrentSession的话自动提交
但是你后面说的那种情况很奇怪,照理说和主键木有关系啊
等大神解释
------其他解决方案--------------------Hibernate都到4了,是该学习了
------其他解决方案--------------------我前几天用4.1.8 session不是你这样取的啊!!!
------其他解决方案--------------------去试试了,
------其他解决方案--------------------hibernate4 好像变动很大、
要看你hibernate文件是如何配置事务的、
getCurrentSession();这样获取的session是就可以不用手动关闭了、
其实跟session有关、
我的猜测是 getCurrentSession() 获取到了你配置的事务、
最后将数据库flush到了数据库中、
以上也都是个人猜测而已、没有看hibernate4的源码、只晓得hibernate4相比hibernate3变动挺大的
------其他解决方案--------------------public class Main {
public static void main(String[] args) {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Student student = new Student();
student.setAge(11);
student.setName("save");
student.setSex("男");
student.setAcademicYear("99999");
Session session = sessionFactory.getCurrentSession();
Transaction ts = session.beginTransaction();
session.save(student);
}
}
------其他解决方案--------------------貌似明白了 只要打印出 sql语句就 执行到数据库了?
Hibernate: insert into student (_name, _age, _sex, _academicYear, _id) values (?, ?, ?, ?, ?)
我把student.hbm.xml 中的
<id name="id" column="_id">
<generator class="native"/>
</id>改为
<id name="id" column="_id">
</id>后
再测试 只save()不commit()就不会对数据库 操作了
------其他解决方案--------------------不会报错呀 我怎么在你留言上回复?
------其他解决方案--------------------