jpa-hibernate配置转换
persistence.xml

spring-demo-cfg.xml

hibernate配置文件




Spring Data JPA:为简化JPA的开发提供帮助。EntityManager的创建与销毁、事务管理等代码被抽取出来,交由Spring统一管理,在没有特殊需求的情况下,开发人员不再需要关心这些;LocalContainerEntityManagerFactoryBean提供了非常灵活的配置方式,JPA规范中的配置信息(persistence.xml )可以由其以属性注入的方式进行配置;通过继承Repository接口,Spring可以为开发人员自动实现Dao层的大部分操作(增删改查、分页、审 计等)。
Spring提供了三种方式建立EntityManagerFactory,LocalEntityManagerFactoryBean、LocalContainerEntityManagerFactoryBean和Obtaining an EntityManagerFactory from JNDI。LocalEntityManagerFactoryBean用于简单应用或测试,通过META-INF/persistence.xml整合其它ORM框架提供的JPA实现。Obtaining an EntityManagerFactory from JNDI用于Java EE应用服务器。LocalContainerEntityManagerFactoryBean用于独立运行的应用程序,它使Spring能够完全控制JPA。通过该方式,开发人员能在一个文件内完成JPA的所有配置。packagesToScan属性使EntityManagerFactory自动扫描指定包内的实体类。jpaVendorAdapter属性定义Hibernate为JPA的提供者,这里Spring采用了适配器模式将Hibernate集成进来。jpaProperties属性详细定义了Hibernate的配置参数,这个配置方式与常规的做法不同。一般来讲,数据库连接池会被单独定义,然后集成到JPA中,而在这里是通过Hibernate来管理所有涉及数据库的配置,这样不仅简化了配置,而且能够使模块之间的关系更清晰。再加上Hibernate早已弃用了dbcp,并自己集成了c3p0,所以通过Hibernate自身来管理数据库连接池应该是最稳妥的方式。Hibernate本身有连接池,官网上介绍它的连接池功能只是用作开发和测试,在实际的项目中需要集成第三方产品,通过设置hibernate.c3p0.*属性就能启动c3p0连接池。
Spring为JPA提供了专门的事务管理器,JpaTransactionManager,并且通过tx:annotation-driven标签自动扫描代码中添加了@Transactional的类和public成员函数。jpa:repositories标签能够自动为指定包内的继承了Repository<T, ID extends Serializable>的Dao接口提供事务处理功能。
对于事务管理需要专门说明一下。首先,管理的对象必须是可以进行事务操作的资源,例如数据库、消息队列、缓存等,并且这些资源要提供事务管理的功能。使用MyISAM引擎的MySQL 数据库本身不支持事务,所以无须在Spring中配置事务管理器,因为即使配置了,也没有实际用处。但Hibernate的事务管理和一级缓存有密切的关 系:当调用save、update等方法时,Hibernate并不直接向数据库发送SQL语句,而是在提交事务或flush一级缓存时才真正向数据库发送SQL。所以,即使数据库不支持事务,Hibernate的事务管理也是有一定好处的,不会对数据操作的效率造成负面影响。也就是说Spring集成Hibernate后,不论数据库是否支持事务,都可以进行事务管理的操作。甚至当Hibernate的connection.autocommit为true时,Spring仍然能够控制事务。
另外,事务的属性可以通过@Transactional标签进行设置。比较重要的属性:传播行为,默认是PROPAGATION_REQUIRED,它表示有事务环境时就加入到已有的环境中,没有就新建一个。比如,在Service层声明了事务管理,同时Dao层因为继承Repository接口也默认声明了事务管理。当Service层中的函数调用Dao层中的函数时,两个函数共用一个事务,即外层函数的事务。Spring中事务传播行为有七种,各有用途,详细说明可以参考相关资料。事务操作,Repository接口定义的增删改默认是read和write,而查询默认为只读。事务回滚,默认是对unchecked异常回滚,对checked异常不回滚。事务隔离级别,默认是DEFAULT,它与数据库本身事务操作有关,如果没有特殊要求,可以忽略它。事务超时,默认是无,可以设置以秒单位的时间。
jpa-hibernate配置转换的更多相关文章
- SpringMVC+JPA+Hibernate配置
首先,Spring配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns=" ...
- SPRING+JPA+Hibernate配置方法
1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...
- Hibernate JPA 中配置Ehcache二级缓存
在Hibernate3 JPA里配置了一下非分布式环境的二级缓存,效果不错.具体过程如下: 1, 需要引入的jar包 http://ehcache.org/downloads/catalog 下载的包 ...
- Spring4.x Jpa + hibernate的配置(废弃JpaTemplate)
近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 ...
- Spring Boot + Jpa(Hibernate) 架构基本配置
本文转载自:https://blog.csdn.net/javahighness/article/details/53055149 1.基于springboot-1.4.0.RELEASE版本测试 2 ...
- SpringBoot + Jpa(Hibernate) 架构基本配置
1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom ...
- Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
(转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题 这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...
- 63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 事情的起源,无意当中在一个群里看到这么一句描述:"有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa&quo ...
- Spring Boot 2.x 之 Spring Data JPA, Hibernate 5
1. Spring Boot常用配置项 基于Spring Boot 2.0.6.RELEASE 1.1 配置属性类 spring.jpa前缀的相关配置项定义在JpaProperties类中, 1.2 ...
- Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
随机推荐
- Android修改system只读权限
在Root后的真机上使用adb remount命令不知道为什么不行. 但有些时候还是想向system文件夹下面写文件,例如把tcpdump工具放到/system/bin 下面,然后就可以直接使用tcp ...
- Reactor模式
对象行为类的设计模式,对同步事件分拣和派发.别名Dispatcher(分发器) Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I ...
- 【Go】为什么用go; Golang Erlang 前世今生
给自己一条退路,再次比较Erlang和Golang 2014-6-28 陈叶皓 chenyehao@gmail.com 雨天的周末,适合码字的时节... 一年前我开始学习go语言的时候,如获至宝,既有 ...
- Java架构师之路:JAVA程序员必看的15本书
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...
- _cpluscplus
_cpluscplus是c++中的定义,而c中没有该定义 1.用来判定代码是c类型还是c++类型 2._cplusplus的类型是"long int",值为199711L int ...
- css的display属性小实验
div与span是常用的盒子模型; 区别: div默认是垂直分布(独占一行) span默认是水平分布(一行可以有多个) 通过float属性可以改变div容器的分布方式达到span容器的效果; 下面 ...
- 爬虫组NABC
Need(需求): 我们小组的研究课题是编写一个更实用的爬虫软件,编写时会应用到学长的部分代码并在其基础上完善创新. 鉴于学长代码已经实现了基本功能,即从网站上面爬取相关的Word文档等与计算机有关的 ...
- 【转】android如何浏览并选择图片 音频 视频
转自:http://www.cnblogs.com/top5/archive/2012/03/06/2381986.html 这几天 在学习并开发android系统的图片浏览 音频 视频 的浏览 ...
- java集合类(五)About Map
接上篇“java集合类(四)About Set” 这次学完Map之后,就剩队列的知识,之后有关java集合类的学习就将告一段落,之后可能会有java连接数据库,I/O,多线程,网络编程或Android ...
- DIV+CSS高手必知的15个CSS常识
1.不要使用过小的图片做背景平铺.这就是为何很多人都不用 1px 的原因,这才知晓.宽高 1px 的图片平铺出一个宽高 200px 的区域,需要 200*200=40, 000 次,占用资源. 2.无 ...