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配置转换的更多相关文章

  1. SpringMVC+JPA+Hibernate配置

    首先,Spring配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns=" ...

  2. SPRING+JPA+Hibernate配置方法

    1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans ...

  3. Hibernate JPA 中配置Ehcache二级缓存

    在Hibernate3 JPA里配置了一下非分布式环境的二级缓存,效果不错.具体过程如下: 1, 需要引入的jar包 http://ehcache.org/downloads/catalog 下载的包 ...

  4. Spring4.x Jpa + hibernate的配置(废弃JpaTemplate)

    近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 ...

  5. Spring Boot + Jpa(Hibernate) 架构基本配置

    本文转载自:https://blog.csdn.net/javahighness/article/details/53055149 1.基于springboot-1.4.0.RELEASE版本测试 2 ...

  6. SpringBoot + Jpa(Hibernate) 架构基本配置

    1.基于springboot-1.4.0.RELEASE版本测试 2.springBoot + Hibernate + Druid + Mysql + servlet(jsp) 一.maven的pom ...

  7. Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

      (转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题   这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...

  8. 63.JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] 事情的起源,无意当中在一个群里看到这么一句描述:"有人么?默默的问一句,现在开发用mybatis还是hibernate还是jpa&quo ...

  9. 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 ...

  10. Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案

    最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...

随机推荐

  1. 4-2.矩阵乘法的Strassen算法详解

    题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B ...

  2. C++中的struct和class的区别

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...

  3. Very large tabs in eclipse panes on Ubuntu

    http://stackoverflow.com/questions/11805784/very-large-tabs-in-eclipse-panes-on-ubuntu ou can edit E ...

  4. SQL Server2008附加数据库之后显示为只读

    SQL Server2008附加数据库之后显示为只读时解决方法 啰嗦的话就不多说了,直入主题吧! 方案一: 碰到这中情况一般是使用的sa账户登录的,只要改为Windows身份验证,再附加数据库即可搞定 ...

  5. 利用QObject反射实现jsonrpc

    1.jsonrpc请求中的params数组生成签名 static QString signatureFromJsonArray(const QJsonArray &array) { QStri ...

  6. Careercup - Facebook面试题 - 4892713614835712

    2014-05-02 09:54 题目链接 原题: You have two numbers decomposed in binary representation, write a function ...

  7. How to use Android Activity's finish(), onDestory() and System.exit(0) methods

    Activity.finish() Calling this method will let the system know that the programmer wants the current ...

  8. javascript中alert()与console.log()的区别

    我们在做js调试的时候使用 alert 可以显示信息,调试程序,alert 弹出窗口会中断程序, 如果要在循环中显示信息,手点击关闭窗口都累死.而且 alert 显示对象永远显示为[object ]. ...

  9. vs-ps combination error

    http://social.msdn.microsoft.com/Forums/en-US/5dfef3d9-edc1-4006-9e81-9d5326419df8/d3d10effect-compi ...

  10. 腾讯QQ企业邮箱在ruby on rails 框架中的mailer配置

    在编写ruby on rails程序时,我们可能会需要用到发送邮件的程序,如果使用gmail进行smtp发送一般问题不大,但很多企业使用的是腾讯QQ企业邮箱.使用该邮箱进行链接时出现各种错误,goog ...