求大神讲解下

Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?

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  中的

改为

再测试  只save()不commit()就不会对数据库 操作了

1分

不配置主键生成策略会报错吧???

1分

大家顶起来了啊

一直理解只是主键生成策略,为了便于移植底层数据库才用native的吗?怎么会和事务有关系

需要测试下

不会报错呀    我怎么在你留言上回复?

1分

你是getCurrentSession的话自动提交

但是你后面说的那种情况很奇怪,照理说和主键木有关系啊

等大神解释

我测试下 getCurrentSession 改成openSession 试试  谢谢

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();

Session session = sessionFactory.openSession();

Transaction ts = session.beginTransaction();

//Student student2 = (Student)session.load(Student.class, 1);

//System.out.println(student2.getName());

session.save(student);

//ts.commit();

}

貌似不行

_id  _name  _age  _sex  _academicYear

1   save    11    男   99999

还是有数据

1分

Hibernate都到4了,是该学习了

1分

我前几天用4.1.8  session不是你这样取的啊!

Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Event theEvent = new Event();

theEvent.setTitle(title);

theEvent.setDate(theDate);

session.save(theEvent);

session.getTransaction().commit();

4.1.8 final  文档里就是上面的写法啊

怎么在用户的留言回复呀

1分

去试试了,

43分

你会结贴不呢?

原因是数据源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);

}

1分

hibernate4 好像变动很大、

要看你hibernate文件是如何配置事务的、

getCurrentSession();这样获取的session是就可以不用手动关闭了、

其实跟session有关、

我的猜测是 getCurrentSession() 获取到了你配置的事务、

最后将数据库flush到了数据库中、

以上也都是个人猜测而已、没有看hibernate4的源码、只晓得hibernate4相比hibernate3变动挺大的

该结贴 了

总结下  测试的程序

SessionFactory sessionFactory = HibernateUtil.getAnnotationSessionFactory();

Session session = sessionFactory.getCurrentSession();

Transaction ts = session.beginTransaction();

Husband h1 = new Husband();

h1.setName(“w1”);

Wife w1 = new Wife();

w1.setName(“ll”);

h1.setMyWife(w1);

session.save(w1);

session.save(h1);

//session.clear() 在这调用 clear()commit后数据库有内容说明save 自动提交了

w1.setName(“wwww”);

w1.setName(“qqq”);

//session.clear() 在这里调用clear()不会访问数据库 缓存清空了

try{

ts.commit();

}catch(Exception e){

System.out.println(“回滚”);

ts.rollback();

}

还有 我用了Annotation后  只save()不commit() 数据库里没有内容。用xml会有内容  可能是   scottxzj 说的吧   我在试试结贴

session.connection()   在  4.1.8 中已废除了  郁闷

失误  没有结贴     测试 失败!

try {

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

session.connection().setAutoCommit(false);

} catch (HibernateException e1) {

e1.printStackTrace();

} catch (SQLException e1) {

e1.printStackTrace();

}

测试结果

false

Hibernate:

insert

into

Wife

(name)

values

(?)

Hibernate:

insert

into

Husband

(myWife_id, name)

values

(?, ?)

我想知道SSH中是怎么管理事物的

hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...相关推荐

  1. mysql 线程id_查找MySQL线程中死锁的ID的方法

    如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以了, 但是众多线程,可怎么找到引起死锁的线程ID呢? MySQL 发展到现在,已经非常强大了,这个问题很好解决. 直 ...

  2. mysql idataparameter_C# 中SqlParameter类的使用方法小结

    在c#中执行sql语句时传递参数的小经验 1.直接写入法: 例如: int Id =1; string Name="lui"; cmd.CommandText="inse ...

  3. 在python IDLE中打开python Shell,就可以直接用import导入当前模块了

    在打开的.py文件上面的工具栏中找Run->Python Shell 就可以了

  4. 怎么在linux下用mysql建库_在MySQL/MariaDB中创建数据库、数据库用户和授予特权(针对Linux平台)...

    在本文中,将学习MySQL/MariaDB数据库创建.数据库用户创建以及如何向用户授予权限,方法针对Linux平台.安装数据库请参考为CentOS 8操作系统安装MySQL的方法,以安装MySQL 8 ...

  5. SqlServer中计算实际年龄的方法

    Excel中有个计算日期差的函数datedif,SqlServer中也有一个类似函数datediff,但是两个函数的计算逻辑是不一致的: Excel中的datedif函数,计算精度到日,不足日的月份差 ...

  6. linux中安装libreoffice的简单方法

    linux中安装libreoffice的方法 有yum源最简单的安装方法 直接用yum install libreoffice* 全部安装 大概400多个包都安装上 安装完成后用命令测试一下能否转换成 ...

  7. python中readlines_python文件读取 readlines()方法之坑

    一.需求: 有类似如下两个文件需要交差对比,进行处理.1.txt12312.txtABCD 二.问题: 首先想到的是打开之后,两次for循环就是了#错误写法f1=open(r"D:\pyte ...

  8. [Hibernate]在VS2010中应用NHibernate 3.2与MySQL

    在VS2010中应用NHibernate 3.2与MySQL 罗朝辉 (http://kesalin.cnblogs.com/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...

  9. hibernate MySQL 无法正确插入数据

    摘自网上的一段解决办法. 原文:http://blog.163.com/me_wxx/blog/static/13519139120105152638477/ 下面是插入数据部分的程序: public ...

最新文章

  1. 安装linux系统报softlock,soft lockup 解决思路
  2. php 后台进程,php是否适合做后台长驻程序
  3. adbunknown Host service问题修复
  4. Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
  5. Delphi 关键 重启 注销
  6. 重构机房收费系统(一)
  7. php控制器,php模型和控制器之间交互
  8. 计算机行业深度分析,广发证券计算机行业深度分析
  9. 13_展示商品的详情
  10. 命令行下载网页视频方法
  11. MessageBox--获知点击确认还是取消?
  12. ListView源码(推荐)
  13. 2021年12月电子学会图形化四级编程题解析含答案:聪明的小猫
  14. 墙裂安利!用腾讯云AI语音合成打造自己的第一本有声书
  15. 论文阅读KMN:Kernelized Memory Network for Video Object Segmentation
  16. Cortex-M MMU内存管理单元和 Linux
  17. 数据分散情况的统计图-盒须图
  18. java二分排序法原理_Java常见排序算法详解—— 二分插入排序
  19. 香港4月1日5G商用,月费198港元起
  20. TCP协议网络安全攻击

热门文章

  1. oracle 在所有表中查某个值,oracle需要查询某个字段的值在其他某个表中有没的值有相同...
  2. python解析xml+得到pascal voc xml格式用于目标检测+美化xml
  3. Verilog HDL语言实现ROM、RAM+有限状态机
  4. Android之ViewDragHelper
  5. 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear
  6. 相互引用的初始化过程
  7. left join 和join区别_sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇
  8. java 改装电动_java 数组
  9. idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
  10. vue 接口节流_vue防抖节流之v-debounce--throttle使用指南