Hibernate控制的事务
Hibernate在发送Sql把对象信息同步到数据时,不是立即进行的而是把这些要发送的Sql缓存在起来,在必要的时候发送。
通过Session的setFlushMode(FlushMode flushMode)方法,来控制在什么时候清空Sql的缓冲区,并把缓存的Sql语句发送出去。
FlushMode是一个枚举,它有3个枚举值。
FlushMode.AUTO,在持久化对象的信息被修改时,那么就要把它同步到数据库中,更新数据库中队应的记录,也就是在产生修改时就会清空缓冲区。
FlushMode.COMMIT,只有在事务提交的时候才清空缓冲区。
FlushMode.NEVER,这个值表示只有在调用了Session的flush()方法才清空缓冲区。
事务保证原子操作的不可分,也就是操作的同时成功或同时失败。
Transaction tran=session.beginTranaction();
tran.commit();
tran.rollback();
以上是事务对象的方法,来实现对事务的支持。
hibernate的事务隔离级别
hibernate的事务隔离级别和JDBC中大致相同。
设置时要在hibernate.cfg.xml配置
<property name="hibernate.connection.isolation">4</property>
1,读未提交的数据(Read uncommitted isolation)
2,读已提交的数据(Read committed isolation)
4,可重复读级别(Repeatable read isolation)
8,可串行化级别(Serializable isolation)
hibernate的锁(悲观锁,乐观锁)
悲观锁是由数据库本身所实现的,会对数据库中的数据进行锁定,也就是锁行。
LockMode.UPGRADE,修改锁,在get()方法中加上这个设置作为第三个参数。
LockMode.NONE 无锁机制
LockMode.READ 读取锁
LockMode.WRITE 写入锁,不能在程序中直接使用
还可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法来设置锁
乐观锁,也就是通过对记录加上某些信息来解决并发访问的问题。
版本检查
要在其表中多加上一个字段表示版本信息,会在读取时读到这个版本号,并在修改之后更新这个版本号,在并发修改的时,只有数据库中记录的版本号比要更新的才进行更新操作,如果数据库记录版本号比要更新的高,就会抛出例外。
写在Xxxxx.hbm.xml中
<version name="version" column="version" type="integer" />
例:
public class User implements Serializable{
private int id;
private String name;
private String phone;
private int version;//记录版本的属性
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPhone(){
return phone;
}
public void setPhone(String phone){
this.phone = phone;
}
public int getVersion(){
return version;
}
public void setVersion(int version){
this.version = version;
}
}
User类的User.hbm.xml文件
<hibernate-mapping package="alan.hbn.concur.version" auto-import="false">
<class name="User" table="user_version">
<id name="id" column="id" type="integer" unsaved-value="0">
<generator class="native"/>
</id>
<version name="version" column="version" type="integer" />
<!--版本控制,指定了版本属性的名字,和对应表中的字段和类型-->
<property name="name" column="name"/>
<property name="phone" column="phone"/>
</class>
</hibernate-mapping>
分享到:
相关推荐
**5.2 Hibernate知识辅导(2--1)** - **实体映射**: 使用注解和XML映射实体类。 - **一对一映射**: 一对一关系的实现方式。 - **一对多映射**: 一对多关系的实现方式。 **5.3 Hibernate知识辅导(2--2)** - **...
1. **Struts框架**: Struts是Apache软件基金会的一个开源项目,主要用于MVC(Model-View-Controller)架构的设计。在博客系统中,Struts负责处理用户请求,将HTTP请求映射到相应的Action类,执行业务逻辑,并通过...
1. **Java基础知识**: - 数据类型:了解基本数据类型(整型、浮点型、字符型、布尔型)以及它们的内存占用和范围。 - 变量与常量:理解变量的声明、初始化和作用域。 - 类与对象:掌握类的定义、对象的创建及...
知识点1: Spring Boot 框架 * Spring Boot 是一个基于 Spring 框架的快速应用程序开发框架,能够快速构建独立的、生产级别的基于 Spring 的应用程序。 * Spring Boot 제공了许多默认配置和 starter 依赖项,能够...
4. **源码**:"4-源码"是整个项目的代码库,可能包括了前端界面、后端服务、控制器、模型类、配置文件等。通过分析源码,可以深入理解项目的架构设计、业务逻辑和功能实现。例如,前端可能使用了Thymeleaf或JSP模板...
- **Hibernate4视频教程**:Hibernate是一个强大的对象-关系映射(ORM)框架,用于简化Java应用程序中的数据访问层。 - **Spring4视频教程**:Spring是一个轻量级的Java开发框架,主要用于简化企业级应用程序的开发...
根据给定的文件信息,我们可以提炼出一系列与Java程序设计相关的知识点,这48讲加上额外的2讲辅导课程,涵盖了Java编程的基础到高级技术,是深入理解和掌握Java语言的宝贵资源。以下是对这些知识点的详细说明: ###...
在4-代码目录下,我们可以看到用Java编程语言编写的HRM系统的核心逻辑。Java作为一款面向对象的语言,以其跨平台的特性,被广泛应用于企业级应用开发。此系统可能采用了MVC(Model-View-Controller)架构模式,使得...
5. **框架知识**:如果你有使用MVC框架(如Spring MVC)、持久层框架(如Hibernate)或前端框架(如Angular、React)的经验,应明确指出并简述应用情况。 6. **数据库技能**:展示你的SQL知识,包括查询优化、事务...
8. **辅导视频**:01-视频可能是一系列的教学视频,帮助学习者理解系统的实现过程,包括编程技巧、问题调试、功能测试等内容,有助于深化理论知识和实践能力。 9. **版本控制**:项目可能使用Git进行版本控制,确保...
“1-部署文档”提供了系统在服务器上的安装和配置步骤,包括环境搭建、数据库连接设置、应用服务器配置等。部署过程通常涉及Java开发环境(如JDK)、应用服务器(如Tomcat)、数据库服务器(如MySQL)的安装,以及...
- 数据库:MySQL或Oracle存储用户信息、作业、成绩等数据,使用JDBC进行数据库操作,可能结合Hibernate或MyBatis简化ORM(对象关系映射)。 - 前端:HTML、CSS和JavaScript,可能使用Bootstrap或Vue.js等框架提升...
“3-资料”可能包含相关的学习资料,例如Java编程基础、Spring Boot教程、数据库管理知识等,帮助用户深入理解系统原理,提升开发技能。 六、辅导视频 “5-视频”中的辅导视频是系统的重要补充,通过实例演示,...
该资源是一个完整的基于Java开发的记账系统项目,包含了源代码、数据库设计、部署文档以及辅导视频,非常适合学习Java Web开发或对财务管理系统感兴趣的开发者。下面将分别介绍这些部分的关键知识点。 1. **Java...
这个项目的重点在于理解和应用Java编程语言来构建一个实用的业务系统,同时也涉及到数据库管理和系统部署的相关知识。 1. **Java编程基础**:Java是一种面向对象的编程语言,它的特性包括平台独立性、丰富的类库和...
1. **Java编程语言**:本项目的核心开发语言是Java,它是一种跨平台的面向对象编程语言。Java的特性如封装、继承和多态在系统设计中得以体现,提高了代码的可维护性和复用性。同时,Java的异常处理机制、IO流、集合...