当前位置: 首页 > news >正文

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.

http://www.lryc.cn/news/3108.html

相关文章:

  • C语言学习笔记(一):了解C语言
  • 回头看——《智能家居项目小结》
  • 社交登陆OAuth2.0
  • C++005-C++选择与分支2
  • IPFS 简介及概述
  • 初学者必读:讲解 VC 下如何正确的创建、管理及发布项目
  • 剑指offer(中等)
  • 微软发布会精华回顾:“台式电脑”抢了风头
  • CF1561C Deep Down Below 题解
  • 秒杀项目之服务调用分布式session
  • 聊聊什么是架构,你理解对了吗?
  • java多线程开发
  • 杂记7--opencv的ar码模块学习
  • [项目设计]高并发内存池
  • 28岁才转行软件测试,目前32了,我的一些经历跟感受
  • Python导入模块的3种方式
  • select 与 where、order by、limit 子句执行优先级比较
  • Linux内核并发与竞争-原子操作
  • Java笔记-泛型的使用
  • 特斯拉无人驾驶解读
  • 生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。
  • Maven_第五章 核心概念
  • 【深度学习】人脸识别工程化落地
  • AOP面向切面编程思想。
  • 实验7-变治技术及动态规划初步
  • JVM垃圾回收机制GC理解
  • C++中的容器
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(五)
  • SpringDI自动装配BeanSpring注解配置和Java配置类
  • 2月面经:真可惜...拿了小米的offer,字节却惨挂在三面