JPA、EJB、事物管理---相关内容整理
目录
■前言
■实现原理:容器管理事务
■代码实现简单描述:
1.JPA
■定义
■1.1.配置文件
■1.2.OSS jar
■1.3.一些OPA的类(举例)
■1.4. jpa 框架在实体类(Entity)中添加非数据库字段的属性---@Transient
■1.5. JPA 原生配置
■1.6. EntityManager 管理事务
■1.7.ORM框架
■1.8.javax.persistence
■1.9.transaction-type
■1.10.JTA 与 RESOURCE_LOCAL 之间的区别
2.EJB-事务管理
2.1.EJB默认事物
2.2.EJB的事务管理分如下两个方面
2.3.容器管理事务
=====
■前言
看了一段业务对于的处理代码,
代码里面没有任何事物处理的相关处理,
却实现了事物功能。
■实现原理:容器管理事务
容器管理事务主要是通过容器自动控制事务的开启,提交和回滚,开发人员不需要手工编写代码,由容器来控制事务的边界,一般来说是业务方法的开始
■代码实现简单描述:
・ 代码部署在WebSphere上
・数据库处理在Service层中,在Sevice层中,有多个对数据库的操作。
・是使用JPA (ORM)实现数据库操作的。可以实现回滚功能。
・有关于JPA的配置文件 WEB-INF/classes/META-INF/persistence.xml
・JPA的配置文件中,管理事务管理方式是JTA,即是由应用程序服务器的实现事物管理。
・ service层中,使用了一个EJB的标签:@Stateless。
1.JPA
jpa详解_java菜鸟1的博客-CSDN博客
■定义
JPA(Java Persistence API)和JDBC类似,也是官方定义的一组接口,但是它相比传统的JDBC,它是为了实现ORM而生的,即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间形成一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
=========================================================
■1.1.配置文件
persistence.xml // JPA persistence.xml
JPA persistence.xml 文件初学者指南_allway2的博客-CSDN博客_persistence.xml
persistence.xml在下面这个目录中
WEB-INF/classes/META-INF
■1.2.OSS jar
org.eclipse.persistence.jpa
java - 我对Maven依赖感到困惑:“org.eclipse.persistence.jpa”和“org.hibernate” | persistence
■1.3.一些OPA的类(举例)
javax.persistence.PersistenceContext
(所属jar javax.persistence-2.x.x.jar )
■1.4. jpa 框架在实体类(Entity)中添加非数据库字段的属性---@Transient
问:jpa表实体的字段和表的字段是一一对应的。比如,那么,如果我在查询时,想在表字段的基础上添加几个返回的字段,怎么办?
解:在实体类中添加我们想添加的字段,并加上注解:@Transient,
@Transient
privite String userId;
效果:这样在调用此类返回时,便有了此字段,我们可以给这个字段赋值,进行操作,而且不会在数据库中添加这个字段。
■1.5. JPA 原生配置
JPA原生配置和使用_Chgl16的博客-CSDN博客
■1.6. EntityManager 管理事务
import javax.persistence.EntityManager;
import javax.persistence.Persistence;public class EMUtil {public static EntityManager getEM() {return Persistence.createEntityManagerFactory("hotel").createEntityManager();}
}import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;
----
public void insertMember(Member member) {em.getTransaction().begin();em.persist(member);em.getTransaction().commit();// 仅仅一个数据库连接,就不关了
// em.close();
}
----
import javax.persistence.*;@Entity
@Table(name = "member")
public class Member {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private int id;private String phone;private String identity;private String username;private String password;/** getter and setter **/
}
----
■1.7.ORM框架
JPA(Java Persistence API), JPA是一个ORM的标准规范,而不是一个具体的ORM框架
( ORM(object relation mapping) 对象关系映射关系 ,面向对象的对象模型和关系型数据之间的相互转换。)
介绍几种ORM框架_火腿编程的博客-CSDN博客
・Hibernate: Hibernate是一个全自动的ORM模型,Hibernate可以自动生成SQL语句,自动执行。
・MyBatis:MyBatis是一款半自动的ORM模型,它支持定制化 SQL、存储过程及高级映射。
・【javax.persistence-2.x.x.jar】或【javaee-web-api-7.0.jar】中的接口,类
javax.persistence.Query和javax.persistence.EntityManager都是JAP发布的接口,是用于对象持久化API。
使用,[em.createNativeQuery(sql);]创建Query
■1.8.javax.persistence
javax.persistence.Persistence - JPA class
■1.9.transaction-type
JPA 事务策略,它可以采用以下两个值之一:
・JTA
・RESOURCE_LOCAL
如果您使用的是 JTA,您可以使用jta-data-source为关联的 JTA 指定 JNDI 名称DataSource,
而对于RESOURCE_LOCAL,您需要使用non-jta-data-source.
■1.10.JTA 与 RESOURCE_LOCAL 之间的区别
JPA实现可以选择自己管理事务(RESOURCE_LOCAL),还是由应用程序服务器的JTA实现对其进行管理。
在大多数情况下,RESOURCE_LOCAL可以。这将使用基本的JDBC级事务。缺点是该事务对于JPA持久性单元而言是本地的,因此,如果您想要一个跨多个持久性单元(或其他数据库)的事务,则RESOURCE_LOCAL可能不够好。
JTA还用于跨JMS和JCA之类的系统管理事务,但这对我们大多数人来说是相当奇特的用法。
要使用JTA,您需要在应用程序服务器中对其进行支持,并且还需要JDBC驱动程序的支持
=========================================================
2.EJB-事务管理
2.1.EJB默认事物
EJB--事务管理 ._51CTO博客_ejb服务
@TransactionManagement(TransactionManagementType.CONTAINER)
表示指定事务的类型。如果省略,默认为CMT方式。
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;@Stateless(name = "UserManager")
@Remote
@TransactionManagement(TransactionManagementType.CONTAINER)
public class UserManagerBean implements UserManager {@PersistenceContextprivate EntityManager em ;@TransactionAttribute(TransactionAttributeType.REQUIRED)public void addUser(String name) {User s = new User();s.setName(name);em.persist(s);System.out.println("服务器端执行成功:保存姓名" + name);}}
2.2.EJB的事务管理分如下两个方面
1、CMT(容器管理事务)(默认)
2、BMT(Bean管理事务)
EJB事务控制(CMT和BMT两种方式以及JTA事务) - 姜师爷闯世界 - 博客园
2.3.容器管理事务
容器管理事务主要是通过容器自动控制事务的开启,提交和回滚,开发人员不需要手工编写代码,由容器来控制事务的边界,一般来说是业务方法的开始
================================
15.