在hibernate的配置文件中添加自动提交事务,在对数据库操作时使用save,get方法时就不需要开启和关闭事务。但是delect和update语句无法执行,也就是说自动开启事务对delect方法无效。
对于删除操作,一般都是先获取需要删除的对象然后再执行删除操作,这样需要执行两个语句,性能不太好,其实删除的时候只用到了主键,所以我们可以创建一个对象,只传入主键属性,然后就可以之间根据这个对象删除数据库中对应的记录了。
之前的方法:
session.getTransaction().begin();
User user = session.get(User.class,1);
session.delete(user);
session.getTransaction().commint();
session.getTransaction().begin();
User user = new User();
user.setUid(1);
session.delete(user);
session.getTransaction().commint();
关于更新操作,也是先获取数据然后再执行更新
session.getTransaction().begin();
User user = session.get(User.class,1);
user.setPassword("123");
session.update(user);
session.getTransaction().commint();
update()方法也可以换成saveOrupdate()方法,saveOrupdate()方法会先检查user对象有没有id,有的话就执行更新操作,没有的话就执行插入操作。
其实上面操作和下面的一样,也就是说不调用update方法的话,提交事务时也会更新到数据库。
session.getTransaction().begin();
User user = session.get(User.class,1);
user.setPassword("123");
session.getTransaction().commint();
从数据库获取的set时会自动更新,自己封装的user,set时是不会执行更新的。
使用get方法的时候,实体类一定要有无参的构造方法,其实get方法的执行过程就是先new一个对象,然后把查询到的数据库中的记录对应的塞进new出的对象中。
关于JPA中两个查询方法getReference和find的比较
getReference方法获取的对象是一个动态代理的对象,调用getReference方法不会立即发送sql语句查询数据库,当调用查询结果对象的时候,才会发送sql语句进行查询,也就是说的懒加载,也叫延迟加载,
find方法是立即加载的方式,调用find方法就会进行数据库查询操作。
一般我们使用懒加载的方法,也就是用到才去查询,避免查询了而没有用到。
Hibernate的事务和并发控制很容易掌握。Hibernate直接使用JDBC连接和JTA资源,不添加任何附加锁定行为。我们强烈推荐你花点时间了解JDBC编程,ANSI SQL查询语言和你使用的数据库系统的事务隔离规范。Hibernate只添加自动版本管理,而不会锁定内存中的对象,也不会改变数据库事务的隔离级别。基本上,使用Hibernate就好像直接使用JDBC(或者JTA/CMT)来访问你的
1. 事务的回顾
1.1 什么是事务(Transaction)
是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql 能将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性。事务通常是以begin transaction开始,以commit或rollback结束。Commint表示提交,即提交事务的所有操作。具体地说就是将事...
@SuppressWarnings("rawtypes")
public List queryByQLList(String hql) throws Exception {
List l
一 事务定义及特性
1、数据库事务的定义:数据库事务(Database Transaction) 是指由一个或多个SQL语句组成的工作单元,这个工作单元中的SQL语句相互依赖,如果有一个SQL语句执行失败,就必须撤销整个工作单元。
以银行转账为例:
2、数据库事务必须具备ACID特征A: Atomic 原子性:整个事务不可分割,要么都成功,要么都撤销。C: Consistency 一致性:事...
最近我们学到的Hibernate中,有个对房屋信息的查询功能。其中页面的一句代码如下:
${house.street.district.name}区${house.street.name},${house.floorage}平米 联系方式:${house.contact}
以上写法用EL显示房屋的信息,但我们的DAO用Hibernate实现的时候,几个相关的对象都要把lazy设
Hibernate的update操作无效果
最近开发代码遇到个问题,数据库框架hibernate执行save、delete、find都可以,但执行update时,没有效果,查看日志没有输出update的SQL,显然是没有执行。
查找相应的service层没有问题,因为同一个方法下其他的update是可以执行,于是查看dao层,dao层没有问题,因为dao中注解类名都没有问题,且是个空类。
Hibernate中设置事务自动提交在项目开发过程中,出现了这样的问题:通过页面表单提交数据,这些数据就是要修改数据库中的数据,表单提交之后,程序运行一切正常,而且,后台也打印出了sql语句,例如:insertintoSYS.HNCITEM05(SNAME,BATE,SONO,SDATE,SNO)values(?,?,?,?,?),而且,该项目有这...
1.bean.xml配置文件的代码
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmln...
transtraction对数据库的操作都是封装到事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中;
@Before
public void init() {
Configuration config=new Configuration().configure();
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schema
最近自己的项目。发现做修改操作时,项目没有报错,但是数据库数据没有修改,结果发现是自己马虎问题导致的。整合一下网络上查来的各种解决方法:session获取方式为:sessionFactory.getCurrentSession()1、可以创建,不能更新、删除。需要手动flush<tx:advice id="txAdvice" transaction-manager="transactionManag
工作中遇到好几次的问题这次终于探了个底,转自http://blog.csdn.net/sunhuwh/article/details/9183539 ,感谢作者!
一.Hibernate实体状态的定义1.瞬态:
一个实体通过new操作符创建后,没有和Hibernate的Session建立关系,也没有手动赋值过该实体的持久化标识(持久化标识可以认为是映射表的主键)。
此时该实体中任何属性的更...
Hibernate事务和并发控制 ++YONG原创,转载请注明1. 事务介绍:1.1. 事务的定义:事务就是指作为单个逻辑工作单元执行的一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性。1.2. 事务具有ACID属性:o 原子