JPA即Java Persistence API,它通过annotation的形式指定实体类到关系数据库的映射,再通过以EntityManager为核心的API进行数据库的增删查改操作,此外还有一套类似于HQL的JPQL查询语言。总体来说,JPA最大的特点就是有效地简化了ORM的配置。JPA是一套标准,标准化的好处不言而喻,比如JDBC。目前JPA的实现包括Hibernate3.2,TopLink,OpenJPA等等。这些实现都遵循了JPA的统一规范,也就是说,如果不使用个别框架的高级特性的话,只要替换lib中的文件,简单地修改一下persistence.xml的属性设置,就可以更换掉底层的ORM框架;对于纯粹的JPA实现,代码上无需做任何改动。
Spring2.0之后的版本对JPA也有支持,但是我个人不太喜欢在JPA的代码中再引入Spring的JpaTemplate。第一,JPA本身就是为了摆脱具体实现的束缚,使用了JpaTemplate虽然隔离了ORM框架,却造成了SpringAPI的侵入;第二,JPA的接口已经非常简洁,这一点不同于JDBC,Spring的JdbcTemplate可以有效地简化代码,但是在JPA上这种效果并不明显。所幸,Spring并不强求只用JpaTemplate同样可以引入Spring的依赖注入和事务支持,这方面Spring的Reference上也特别指出了。
昨天整合Spring和JPA进行测试的时候遇到了几个的问题:
<ol>
<li>在测试时应使用Reference中提到的Application Managed EntityManagerFactory。因此在配置EntityManagerFactory时要使用org.springframework.orm.jpa.LocalEntityManagerFactory,其中的属性只需设置persistenceUnitName。persistence.xml要放在META-INF目录下。</li>
<li>测试时应通过ApplicationContext的方式初始化,而不是BeanFactory,否则将造成@PersistenceContext或@PersistenceUnit无法注入。即使手动声明EntityManager进行注入也无法使用事务支持。关于ApplicationContext和BeanFactory的区别,容我今天补一下。。。</li>
<li>要在每个使用事务支持的DAO上用@Transactional标注,然后在Spring的配置文件中加上
引用
<tx:annotation-driven transaction-manager="transactionManager" />
(transactionManager要在xml文件中声明,具体可以看Spring的Reference。)此外,还要注意的是配置文件的schema要使用spring-beans-2.5.xsd而非2.0。
</li>
<li>最后执行测试时可能会报以下错误:
引用
java.lang.NoSuchMethodError:javax.persistence.PersistenceContext.properties()
看了Spring的论坛才知道这是由于我们在开发Web项目时,通常将Tomcat的lib加入到classpath中,而在Tomcat的lib中有一个annotation-api.jar,其中包含了一个旧版本的javax.persistence包,与我们要用的ejb3-persistence.jar中的同名类发生了冲突。解决方法是在运行测试时,打开Eclipse的Run对话框,在classpath一项中将ejb3-persistence.jar加入到bootstrap中即可。
</li>
</ol>
分享到:
相关推荐
springboot + spring JPA + mysql 【前端技术框架】 VUE + VUEX + axios + adminLTE3 【注意】 1,本地需要安装maven并配好maven源 2,本地需要安装npm环境并配好npm源 3,如果对这些操作不熟悉的,请先学习一下相关...
springboot + spring JPA + mysql 前端技术框架 VUE + VUEX + axios + adminLTE3 页面效果 使用说明 安装本项目 1,克隆项目到本地 git clone https://github.com/q513021617/zhiyiCMS.git 2,进入前端项目目录并...
目前只是最最基本刚刚可以跑起来的版本,还有很多设计不合理要改进的地方,开源是为了分享做项目使用Flink的一些思路,个人认为有几点较为值得参考,本人实测可用: 自定义的HttpSink、作为Socket服务端接收数据 :...
springboot + spring JPA + mysql ## 前端技术框架 VUE + VUEX + axios + adminLTE3 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业...
通过大量的实战编码进行讲解,课程以...第二章:springboot核心功能第三章:热部署的几种模式第四章:Web开发的各种技术第五章:数据访问层:spring data jpa、jdbctemplate、mybatis、redis第六章:异常相关的处理
如果仅仅测试dubbo:boot-dubbo-simple boot-dubbo-simple-client上述两个项目就够用了boot-dubbo-infrastructure这个模块项目只与数据库相关,其中集成了Spring-Data-Jpa以及MybatisSpring-Data-Jpa一般负责增删改...
java版商城源码下载 learning-project 该项目收集一些优秀的开源项目 java 微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue...springcloud版本的若依,集成springcloud的几大神兽:eureka,gateway,
幸运的是,您可以使用,但是您必须注意以下几点: 您需要先运行TypeRepositoryTest文件,然后再运行MovieRepositoryTest文件,因为Movie依赖于Type 。 上面文档中提到的测试方法被标记为@Ignore ,因此您需要在...
Web Bean 受到了几个现有的 Java framework(包括 Seam、Guice 以及 Spring)的影响。不过,Web Bean 拥有它自己独特的特性:比 Seam 还要完善的 typesafe、比 Spring 更 stateful 而没有那么地以 XML 为中心,并且...