JPA(Java Persistence API )也就是说,java存储数据API,它提供的接口更方便的存储数据,当然,经过一些复杂的,并需要使用查询操作Java Persistence query language,个和sql基本一样,仅仅是须要遵循还有一些语法规则。能够參考http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html 。

在使用JPA时,比方你的MySql中有定义了一个Lesson表格,如今想对Lesson表格进行加入一个记录,这时候你须要写的代码主要有两个:

1、写一个Lesson.java,就是一个pojo啦。一个简单的java对象。里面包含了数据库中Lesson表格的全部字段,这里见Lesson.java中的属性名称同数据库的名称保存一致便ok了。然后再User.java类定义前面加上@Entity这个annotation。这样子相当标注了这个Lesson.java类将作为存储时的一个实体来对待。

2、写一个存储接口,比方LessonServiceImpl.java。这个类里面须要有一个javax.persistence.EntityManager类的属性,比方命名为em。这样对应的数据操作就能够通过这个em来实现,比方要加入一天记录,仅仅须要调用em.persist。更新时em.merge,删除时em.remove。JPA考虑到这些通常的应用因此设计了这些简单的接口方便操作。以下是该类的部分代码

@Transactional
public class LessonServiceImpl implements LessonService {
    private EntityManager em;
   
    @PersistenceContext
    public void SetEntityManager(EntityManager em)
    {       
        this.em = em;
    }

public void remove(int id) {
        // TODO Auto-generated method stub
        Lesson lesson = em.find(Lesson.class, id);
        if(lesson != null)
        {
            em.remove(lesson);
        }
    }

.............

当然须要注意到的是存储的接口LessonServiceImpl.java在设计的时候一般是作为singleton的类型,因此一般是在类工厂里面将来。

并且通常LessonServiceImpl.java中的那个EntityManager对象是通过依赖注入的方式在类工厂中直接设置。比方以下的代码spring factory中的样例

................

<bean id="LessonService" class="quickstart.service.LessonServiceImpl" />

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        .......................

</bean>

<bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

...................

这里使用的不是纯粹的JPA,而是使用hibernate-jpa-2.0-api-1.0.0.Final.jar中的JPA。对LessonServiceImpl.java这个类的定义前增加@Transactional,表示这个类须要进行事务管理,而使用的事务则是通过<tx:annotation-driven />来指定的。也就是LessonServiceImpl要通过这个类工厂中定义的transactionManager来进行数据的操作时的事务处理。能够參考http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html#transaction-declarative 。

定义一个set函数这个函数传递进一个EntityManager的类參数,通过这个接口类工厂才干够将LessonServiceImpl须要EntityManager由类工厂中注入进去。然后这个set函数须要加上@PersistentContext这个annotation,表示这个就是注入存储上下文对象的接口。能够參考http://download.oracle.com/javaee/5/tutorial/doc/bnbqw.html 。

当然另外我想最简单清楚表现JPA使用的方法可能是这样,採取直接注入的方式:

<bean id="LessonService" class="quickstart.service.LessonServiceImpl" >

<property name="entityManager" ref="entityManager"/>

</bean>

可是这样一个问题就是全部的訪问数据的接口都要注入一次。

所以这里通过AOP的方法及结合annotation的方法(经常使用的是xml方式)来进行依赖注入。对于事务处理通过@Transactional来实现在,,所以在这里,我们假设删除@Transactional这相当于删除事务管理,这将导致只能够查询该数据不能被删除或更新;对于管理entity通过@PersistentContext,类工厂将这里命名entityManagerFactory(默认名称)的bean传递到所有的植物bean要加入@PersistentContext接口(这里是LessonService)

JPA @PersistenceContext和@Transactional Annotation相关推荐

  1. JPA @PersistenceContext及@Transactional Annotation

    JPA @PersistenceContext及@Transactional Annotation 2011-05-17 09:25  9521人阅读  评论(1)  收藏  举报 jpa class ...

  2. Spring @transactional annotation 事务使用详解

    来源:http://www.yihaomen.com/article/java/412.htm annotation 方式写程序越来越称谓主流了,以前用hibernate 也用 xml 一大堆配置文件 ...

  3. How does Spring @Transactional Really Work?--转

    原文地址:http://blog.jhades.org/how-does-spring-transactional-really-work/ In this post we will do a dee ...

  4. Spring ORM示例 - JPA,Hibernate,Transaction

    Spring ORM示例 - JPA,Hibernate,Transaction 欢迎来到Spring ORM示例教程.今天我们将使用Hibernate JPA事务管理来研究Spring ORM示例. ...

  5. primefaces教程_Primefaces,带有JPA的Spring 4(Hibernate 4 / EclipseLink)示例教程

    primefaces教程 Java Persistence API is a standard specification. It provides a persistence model that' ...

  6. orm jpa_Spring ORM示例– JPA,Hibernate,事务

    orm jpa Welcome to the Spring ORM Example Tutorial. Today we will look into Spring ORM example using ...

  7. Hibernate与JPA

    本章首先给大家介绍持久化,ORM与DAO三个概念,以及它们之间的关系. 1.1持久化,DAO与ORM 介绍持久化,DAO与ORM三个概念,以及它们之间的关系. 1.1.1 持久化 数据在计算机中有两种 ...

  8. Spring Data JPA的持久层

    1.概述 本文将重点介绍Spring 3.1,JPA和Spring Data的持久层的配置和实现. 有关使用基于Java的配置和项目的基本Maven pom设置Spring上下文的分步介绍,请参阅本文 ...

  9. 关于Spring的事务Transactional,锁同步,并发线程

    Spring事务传播机制和数据库隔离级别 在标准SQL规范中定义了4个事务隔离级别,不同隔离级别对事务处理不同 . 未授权读取(Read Uncommitted): 也称 未提交读.允许脏读取但不允许 ...

最新文章

  1. 一个 SAP 开发工程师十余年的技术写作之路回顾
  2. vue prop不同数据类型(数组,对象..)设置默认值
  3. 图片识别出处_AI人脸识别
  4. 72 include动作和指令的区别
  5. 80后偷偷“变老”的20种表现
  6. 机器学习-吴恩达-笔记-12-推荐系统
  7. 无法执行任何java命令,报错OutOfMemoryError: Cannot create GC thread. Out of system resources
  8. 哈希革新Transformer:这篇ICLR高分论文让一块GPU处理64K长度序列
  9. 锂电池充电芯片,30款设计免费开源
  10. 网络编程三剑客之sed
  11. C/C++程序员是什么让你有如此优势?音视频开发该怎么学?
  12. spry使用视频_Spry Fox如何利用Cloud Build
  13. C++结课大作业——职工管理系统
  14. unity如何改变重力方向
  15. 4、判断一个年份是否为闰年。(闰年即满足以下两条件的年份:其一:能被4整除但不能被100整除;其二:能被400带除)
  16. [小说]魔王冢(52)赵四爷
  17. Day31.只出现一次的数字
  18. Baxter手臂控制
  19. B2C电子商务网站运营推广的优化技巧
  20. git 推送出现 quot;fatal: The remote end hung up unexpectedlyquot; 解决方案

热门文章

  1. 越狱Season 1-Episode 7: Riots, Drills and the Devil: Part 2
  2. 教培行业正在开启新纪元
  3. 散列表查找为何如此之快
  4. Android中的Junit单元测试
  5. 一篇就够!数据增强方法综述
  6. 43份ChatGTP报告分享
  7. 利用FFT计算非平稳随机信号的WVD分布
  8. 起底币圈地下骗局:传销币、资金盘横行,百亿财富被黑手收割
  9. UITextField实现过滤选中状态拼音
  10. MAC 如何配置 PCL 库并在 VS Code 中使用