hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
求大神讲解下
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就存到数据库了?...相关推荐
- mysql 线程id_查找MySQL线程中死锁的ID的方法
如果遇到死锁了,怎么解决呢?找到原始的锁ID,然后KILL掉一直持有的那个线程就可以了, 但是众多线程,可怎么找到引起死锁的线程ID呢? MySQL 发展到现在,已经非常强大了,这个问题很好解决. 直 ...
- mysql idataparameter_C# 中SqlParameter类的使用方法小结
在c#中执行sql语句时传递参数的小经验 1.直接写入法: 例如: int Id =1; string Name="lui"; cmd.CommandText="inse ...
- 在python IDLE中打开python Shell,就可以直接用import导入当前模块了
在打开的.py文件上面的工具栏中找Run->Python Shell 就可以了
- 怎么在linux下用mysql建库_在MySQL/MariaDB中创建数据库、数据库用户和授予特权(针对Linux平台)...
在本文中,将学习MySQL/MariaDB数据库创建.数据库用户创建以及如何向用户授予权限,方法针对Linux平台.安装数据库请参考为CentOS 8操作系统安装MySQL的方法,以安装MySQL 8 ...
- SqlServer中计算实际年龄的方法
Excel中有个计算日期差的函数datedif,SqlServer中也有一个类似函数datediff,但是两个函数的计算逻辑是不一致的: Excel中的datedif函数,计算精度到日,不足日的月份差 ...
- linux中安装libreoffice的简单方法
linux中安装libreoffice的方法 有yum源最简单的安装方法 直接用yum install libreoffice* 全部安装 大概400多个包都安装上 安装完成后用命令测试一下能否转换成 ...
- python中readlines_python文件读取 readlines()方法之坑
一.需求: 有类似如下两个文件需要交差对比,进行处理.1.txt12312.txtABCD 二.问题: 首先想到的是打开之后,两次for循环就是了#错误写法f1=open(r"D:\pyte ...
- [Hibernate]在VS2010中应用NHibernate 3.2与MySQL
在VS2010中应用NHibernate 3.2与MySQL 罗朝辉 (http://kesalin.cnblogs.com/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 ...
- hibernate MySQL 无法正确插入数据
摘自网上的一段解决办法. 原文:http://blog.163.com/me_wxx/blog/static/13519139120105152638477/ 下面是插入数据部分的程序: public ...
最新文章
- 安装linux系统报softlock,soft lockup 解决思路
- php 后台进程,php是否适合做后台长驻程序
- adbunknown Host service问题修复
- Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
- Delphi 关键 重启 注销
- 重构机房收费系统(一)
- php控制器,php模型和控制器之间交互
- 计算机行业深度分析,广发证券计算机行业深度分析
- 13_展示商品的详情
- 命令行下载网页视频方法
- MessageBox--获知点击确认还是取消?
- ListView源码(推荐)
- 2021年12月电子学会图形化四级编程题解析含答案:聪明的小猫
- 墙裂安利!用腾讯云AI语音合成打造自己的第一本有声书
- 论文阅读KMN:Kernelized Memory Network for Video Object Segmentation
- Cortex-M MMU内存管理单元和 Linux
- 数据分散情况的统计图-盒须图
- java二分排序法原理_Java常见排序算法详解—— 二分插入排序
- 香港4月1日5G商用,月费198港元起
- TCP协议网络安全攻击
热门文章
- oracle 在所有表中查某个值,oracle需要查询某个字段的值在其他某个表中有没的值有相同...
- python解析xml+得到pascal voc xml格式用于目标检测+美化xml
- Verilog HDL语言实现ROM、RAM+有限状态机
- Android之ViewDragHelper
- 小甲鱼 OllyDbg 教程系列 (十四) : 模态对话框 和 非模态对话框 之 URlegal 和 movgear
- 相互引用的初始化过程
- left join 和join区别_sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇
- java 改装电动_java 数组
- idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题
- vue 接口节流_vue防抖节流之v-debounce--throttle使用指南