`
Classicning
  • 浏览: 255725 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring+JPA几点注意

    博客分类:
  • Tech
阅读更多
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>
分享到:
评论
1 楼 TrampEagle 2008-04-02  
不错。

相关推荐

    spring+jpa+atomikos多数据源

    "spring+jpa+atomikos多数据源"是一个重要的技术组合,用于构建能够同时连接并操作不同数据库的应用程序。下面将详细介绍这个主题涉及的知识点。 首先,Spring框架是Java开发中最广泛使用的轻量级框架,提供依赖...

    spring+JPA示例

    Spring 和 JPA(Java Persistence API)是 Java ...通过深入理解和实践这些知识点,开发者可以更好地掌握 Spring 和 JPA 的结合使用,从而提高开发效率,降低维护成本。在实际项目中,这样的示例会是非常有价值的参考。

    各种数据源配置之Spring+JPA配置BoneCP数据源

    总结起来,配置Spring+JPA与BoneCP数据源涉及的关键知识点包括:Spring框架、JPA、BoneCP连接池、数据库驱动、依赖管理、Spring配置、实体类、Repository接口以及Spring Boot的启动配置。理解并熟练掌握这些知识点,...

    Springmvc+JPA(Hibernate4)+redis+activemq

    整合这些技术时,还需要关注以下几点: - **全局异常拦截统一处理**:通过Spring MVC的拦截器机制,可以实现全局异常捕获和处理,保证异常信息的统一记录和反馈,提高用户体验。 - **附件上传下载**:使用Spring ...

    网上购物struts2+spring+jpa+ajax

    该项目是一个基于Struts2、Spring、JPA和Ajax技术实现的网上购物系统。这个系统的主要目的是为了演示如何在实际开发中整合这些技术,提供一个功能完善的电商应用框架。以下是对这些关键技术点的详细解释: **Struts...

    Spring Data JPA 笔记

    Spring Data JPA 是一个强大的框架,它简化了Java应用程序与数据库之间的交互,是Spring生态中的重要组成部分。通过使用Spring Data JPA,开发者可以避免编写大量的JPA(Java Persistence API)和SQL代码,专注于...

    基于Spring+JPA+Velocity+Ehcache的商城系统源码.zip

    这个项目的核心知识点涵盖了多个方面,包括但不限于以下几个关键领域: 1. **Spring框架**:Spring是Java开发中的核心框架,它提供了一个全面的编程和配置模型,用于简化企业级应用开发。在本项目中,Spring可能被...

    springboot+dubbo+zookeeper+JPA步骤

    在创建过程中,需要注意以下几点: - **选择技术栈**:使用 WebMySQLMybatis。 - **实体类与服务接口**:实体类对象和服务接口需要保持一致,以便于消费者可以正确地调用生产者的服务。 - **序列化接口**:实体类...

    基于SpringBoot+JPA的信息管理系统

    【SpringBoot基础】 SpringBoot是由Pivotal团队提供的全新框架,其设计目标是为了...以上就是基于SpringBoot+JPA的信息管理系统的核心知识点。通过学习和实践,开发者可以快速掌握如何构建一个功能完善的后台管理系统。

    spring4+hibernate4+jpa 附有jar包

    在学习这个DEMO时,你需要关注以下几个关键点: 1. **Spring配置**:查看Spring的配置文件,了解如何配置DataSource、SessionFactory、EntityManagerFactory、TransactionManager等。 2. **JPA实体类**:研究实体类...

    springboot+spring data jpa+thymeleaf学习web项目整合demo源码

    在 "springboot+spring data jpa+thymeleaf学习web项目整合demo源码" 中,我们可以学习到以下几个关键知识点: 1. **Spring Boot 整合**:Spring Boot 可以与多个框架集成,如 Spring MVC、Spring Data 和 ...

    ssj(spring+Struts2+jpa)框架的集成(含jar包)

    SSJ框架,全称为Spring+Struts2+JPA,是一种经典的Java企业级应用开发框架组合,用于构建高效、可维护的Web应用程序。这个框架集合了Spring的强大IoC(Inversion of Control)和AOP(Aspect Oriented Programming)...

    spring2.5 + jpa(hibernate3) 实例源码

    在"spring2.5jpa"这个源码实例中,你可能会看到以下几个关键部分: 1. **配置文件**:如`applicationContext.xml`,其中会配置Spring的数据源、JPA实体管理工厂以及事务管理器。 2. **实体类**:代表数据库表的Java...

    struts2 +spring2 +jpa

    为了更好地理解和使用这个实例,你需要了解以下几个关键点: 1. Struts2配置:学习如何配置Struts2的配置文件(struts.xml),定义Action类和结果页面的映射。 2. Spring2配置:理解Spring的ApplicationContext配置...

    springBoot整合springData JPA

    在实际的项目中,我们还需要关注以下几点: - 数据源配置:Spring Boot默认会寻找`application.properties`或`application.yml`中的`spring.datasource`配置来设置数据源。 - Entity类:这是JPA中的核心,用来映射...

    Spring Data JPA

    下面将详细讲解几个关键知识点: 1. **Entity映射**:在Spring Data JPA中,我们需要定义实体类来映射数据库表。例如,一个名为`User`的实体类可能对应数据库中的`users`表。我们使用`@Entity`注解标识实体类,并用...

    Spring Data JPA中文文档[1.4.3]

    在Spring Data JPA中,主要包含以下几个核心知识点: 1. **Repository接口**:这是Spring Data JPA的核心特性之一,通过定义一组通用的CRUD(创建、读取、更新、删除)操作接口,开发者可以快速实现数据访问层。...

    最基础的spring-boot-jpa框架

    在"最基础的spring-boot-jpa框架"中,我们可以深入探讨以下几个关键知识点: 1. **Spring Boot 简介**:Spring Boot 通过“约定优于配置”的原则,简化了Spring应用的配置。它默认配置了很多常见的应用设置,比如...

    springData-jpa-demo

    Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA) 的交互,使得在Spring应用程序中处理数据库操作变得更加便捷。本项目“springData-jpa-demo”旨在提供一个示例,帮助开发者理解如何在实践...

Global site tag (gtag.js) - Google Analytics