日期:2014-05-19  浏览次数:20609 次

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()就不会对数据库 操作了 
------其他解决方案--------------------
不会报错呀    我怎么在你留言上回复?
------其他解决方案--------------------