hibernate 在做更新和删除的时候一定要把事务开启
在做更新和删除的时候一定要把事务开启
在做更新和删除的时候一定要把事务开启
在做更新和删除的时候一定要把事务开启
重要的事情说三遍!!!
curd之前配置文件
<property name="hbm2ddl.auto">update</property>
练习hibernate的CURD(单表操作 save& update& delete& get/load )时,发现update& delete方法执行不成功,冥思苦想也没想出个所以然,期间连重启等等笨办法都试了,结果毫无头绪,等到不经意间往上一翻,发现TM之前试验不利用事务提交的方法后事务没开启,WTF。。。
回顾一下不开事务也能提交的方法
session.doWork(new Work(){ @Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
connection.setAutoCommit(true);
} });
//保存对象进数据库
session.save(s);
//强制输出sql语句
session.flush();
整个代码。。。之前init()和destory()中红色部分注释了
package hibernate_01; import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; //测试的源程序要写在新建的Source Folder里 //测试类
public class StudentsTest { private SessionFactory sessionFactory;
private Session session;
private Transaction transaction; @Before
public void init(){
//创建配置对象
Configuration config =new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//创建会话工厂对象
sessionFactory=config.buildSessionFactory(serviceRegistry);
//会话对象
session =sessionFactory.openSession();
//开启事务
transaction =session.beginTransaction(); } @After
public void destory(){
transaction.commit();//提交事务
session.close();//关闭会话
sessionFactory.close();//关闭会话工厂
} @Test
public void testSaveStudents(){ //生成学生对象
Students s=new Students(2,"张三","男",new Date(),"山东"); session.doWork(new Work(){ @Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
connection.setAutoCommit(true);
} });
//保存对象进数据库
session.save(s);
//强制输出sql语句
session.flush();
} @Test
public void testGetStudents(){
Students s=(Students) session.get(Students.class, 1); //.get(查询表对应的类对象, 查询对象的主键);
System.out.println(s.toString()); } @Test
public void testLoadStudents(){
Students s=(Students) session.load(Students.class, 1); //.load(查询表对应的类对象, 查询对象的主键);
System.out.println(s.toString()); } @Test
public void testUpdateStudents(){
Students s=(Students) session.get(Students.class, 1);
s.setGender("女");
session.update(s);
session.flush();
} @Test
public void testDeleteStudents(){
Students s=(Students) session.load(Students.class, 2);
System.out.println(s.toString());
session.delete(s);
session.flush();
} }
当然,不开启事务,也能执行成功(虽然麻烦),update &delete 都要学习testSaveStudents()方法添加doWork那一段了
hibernate 在做更新和删除的时候一定要把事务开启的更多相关文章
- 【 Hibernate 】Hibernate的session更新和删除失败问题
applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- Hibernate批处理操作优化 (批量插入、更新与删除)
问题描述 我开发的网站加了个新功能:需要在线上处理表数据的批量合并和更新,昨天下午发布上线,执行该功能后,服务器的load突然增高,变化曲线异常,SA教育了我一番,让我尽快处理,将CPU负载降低. 工 ...
- MySQL(四) 数据表的插入、更新、删除数据
序言 数据表的插入.更新.删除非常简单,但是简单的也要学习,细节决定成败. ---WH 一.插入数据 格式:INSERT INTO 表名(字段名...)VALUES(值...); 创建环境 使用per ...
- PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
原文: PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...
- 三、MongoDB的创建、更新和删除
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D( ...
- [转载]MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
本文介绍数据库的4个基本操作:创建.读取.更新和删除(CRUD). 接下来的数据库操作演示,我们使用MongoDB自带简洁但功能强大的JavaScript shell,MongoDB shell是一个 ...
- 在DataTable中更新、删除数据
/*在DataTable中选择记录*/ /* 向DataTable中插入记录如上,更新和删除如下: * ----但是在更新和删除前,首先要找出要更新和删除 ...
- SQL Server索引进阶:第十三级,插入,更新,删除
在第十级到十二级中,我们看了索引的内部结构,以及改变结构造成的影响.在本文中,继续查看Insert,update,delete和merge造成的影响.首先,我们单独看一下这四个命令. 插入INSERT ...
- 返璞归真 asp.net mvc (1) - 添加、查询、更新和删除的 Demo
原文:返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo [索引页] [源码下载] 返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo 作者 ...
随机推荐
- [转]java中Collections.sort排序详解
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e, ...
- 读书笔记_Effective_C++_条款二十七:尽量少做转型动作
有关转型的几种做法,已经在早些的博客中写过了.这里先简单回顾一下,再讲一讲effective中对之更深入的阐述. 转型可以按风格可以分成C风格转型和C++风格转型两大类,C风格转型很容易看到,因为我们 ...
- UML类图符号 各种关系说明以及举例(转载)
文章出处:http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述对象和类之间相互关系的方式包括:依赖(Dependen ...
- Powerdesigner打开工程提示打印错误 解决方法
在使用PowerDesigner打开工程时, 提示打印错误的问题,具体错误信息提示如下: 在您可以执行与打印机有关的任务(例如页面设置或打印一个文档)之前,您必须已经安装打印机.您想现在安装打印机么? ...
- 在雇员表中查找第二高的工资SQL语句助记
"在雇员表中查找第二高的工资的员工记录"SQL语句怎么写 这个查询首先查找最高工资,然后将它从列表中排除.再查找最高工资. 非常明显,第二次返回的是 ...
- TMapTextfile v.99/1
By Hellinger Software. Class to handle text files as memory mapped files. Including efficient method ...
- 【转】2012年6月26 – PPS网络电视PHP工程师最新面试题
每一次面试都是一场较量,和面试官,更是和你自己! 前言:虽然面试职位是PHP工程师,但题目仅绝非限于PHP,甚至都没有多少PHP的题!inner peace!希望能给你带了一丝帮助. PPS网络电视面 ...
- 无法执行磁盘检查因为windows无法访问
固态硬盘迁移系统后,将原先的系统盘(H,重新系统后固态硬盘的主分区变为了C盘)格式化,并和邻近的D盘合并.合并后,将盘符重新改为D盘,而D盘原有的软件安装目录Program Files无法识别,显示目 ...
- Linux使用RPM安装软件
什么是RMP? RPM 的为Redhat Package Manager (RPM软件包管理器)的缩写. RPM包,这种软件包就像windows的EXE安装文件一样,各种文件已经编译好,并打了包,哪个 ...
- thinkphp输出表格
//这是打印5列n行的表格,所以mod="5" value="4" <tr> <volist name="data" id ...