当前位置: 首页 > 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.

相关文章:

JPA、EJB、事物管理---相关内容整理

目录 ■前言 ■实现原理:容器管理事务 ■代码实现简单描述: 1.JPA ■定义 ■1.1.配置文件 ■1.2.OSS jar ■1.3.一些OPA的类(举例) ■1.4. jpa 框架在实体类(Entity)中添加非数据库字段的属性--…...

C语言学习笔记(一):了解C语言

什么是C语言 C语言是一种高级编程语言,最早由丹尼斯里奇在1972年开发。它是一种通用编程语言,提供了高级编程语言的方便和易用性,同时又有较低级别的编程语言的灵活性和效率。C语言在许多操作系统、编译器和应用程序开发中广泛使用&#xff…...

回头看——《智能家居项目小结》

openAI兴起,于是拿着之前小组合作的项目(承认优化较差),交给AI试着帮忙优化下1.功能函数(TCP_SER_INIT)优化源代码:int TCP_SER_INIT(int *tcpsocket, const char *ip, const char *…...

社交登陆OAuth2.0

QQ、微博、github 等网站的用户量非常大,别的网站为了 简化自我网站的登陆与注册逻辑,引入社交登陆功能; 步骤: 1)、用户点击 QQ 按钮 2)、引导跳转到 QQ 授权页 3)、用户主动点击授权&#xff…...

C++005-C++选择与分支2

文章目录C005-C选择与分支2条件语句C实现else if 语句题目描述 根据成绩输出成绩等级ABCDEif嵌套语句题目描述 输出三个数中的最大值题目描述 模拟游戏登录switch语句三元运算符题目描述 输出三个数中的最大值-基于3元运算符题目描述 根据1-7输出星期1-星期日案例练习题目描述 …...

IPFS 简介及概述

文章目录 IPFS 简介IPFS 包含的协议内容及其理解IPFS 和 BitTorrent 区别IPFS 简介 星际文件系统(InterPlanetary File System). IPFS 是一个分布式的网络文件系统, 点到点超媒体协议. 可以让我们的互联网速度更快, 更加安全, 并且更加开放. IPFS协议的目标是取代传统的互联网…...

初学者必读:讲解 VC 下如何正确的创建、管理及发布项目

Visual C 的项目文件组成,以及如何正确的创建及管理项目。 本内容是初学者必须要掌握的。不能正确的管理项目,就不能进一步写有规模的程序。 一、项目下各种常见文件类型的功能 1. 代码文件 扩展名为 .cpp、.c、.h 等。 通常情况下,项目…...

剑指offer(中等)

目录 二维数组中的查找 重建二叉树 矩阵中的路径 剪绳子 剪绳子② 数值的整数次方 表示数值的字符串 树的子结构 栈的压入、弹出序列 从上到下打印二叉树① 从上到下打印二叉树③ 二叉搜索树的后序遍历序列 二叉树中和为某一值的路径 复杂链表的复制 二叉搜索树与…...

微软发布会精华回顾:“台式电脑”抢了风头

Lightbot北京时间2016年10月26日晚10点,微软在纽约发布了名为 Surface Studio 的一体机、名为 Surface Dial 的配件以及外观未变的顶配版 Surface Book。同时,微软宣布了 Windows 10 下一个重要版本——“Creators Update”的数项新功能,包括…...

CF1561C Deep Down Below 题解

CF1561C Deep Down Below 题解题目链接字面描述Deep Down Below题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路TLE算法具体思想TLE特例AC思想代码实现备注题目 链接 https://www.luogu.com.cn/problem/CF1561C 字面描述 Deep Down Below 题面翻译…...

秒杀项目之服务调用分布式session

目录 nginx动静分离 服务调用 创建配置zmall-cart购物车模块 创建配置zmall-order订单模块 服务调用 spring session实战 什么是Spring Session 为什么要使用Spring Session 错误案例展示 配置spring-session 二级域名问题 用户登录 nginx动静分离 第1步&#xff…...

聊聊什么是架构,你理解对了吗?

什么是架构?软件有架构?建筑也有架构?它们有什么相同点和不同点? 下面咱们就介绍一下,容易混淆的几个概念 一、系统与子系统 系统 泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是 “总体”、“整体”或“联盟” 子系…...

java多线程开发

1.并发和并行 并发:同一时间段内多个任务同时进行。 并行:同一时间点多个任务同时进行。 2.进程线程 进程(Process):进程是程序的一次动态执行过程,它经历了从代码加载、执行、到执行完毕的一个完整过程…...

杂记7--opencv的ar码模块学习

背景&#xff1a;项目需要用到marker知识&#xff0c;所以到官网上临时补一些知识。 概要&#xff1a;主要介绍marker一些接口的含义&#xff0c;纯属个人理解&#xff0c;有误则希望大佬不吝赐教 1、 涉及ar码操作学习&#xff0c;其头文件为&#xff1a; #include <op…...

[项目设计]高并发内存池

目录 1、项目介绍 2、高并发内存池整体框架设计 3、thread cache <1>thread cache 哈希桶对齐规则 <2>Thread Cache类设计 4、Central Cache <1>Central Cache类设计 5、page cache <1>Page Cache类设计 6、性能分析 <1>定长内存池实现…...

28岁才转行软件测试,目前32了,我的一些经历跟感受

我是92年的&#xff0c;算是最早的90后&#xff0c;现在跟你介绍的时候还恬不知耻的说我是90后&#xff0c;哈哈&#xff0c;计算机专业普通本科毕业。在一个二线城市&#xff0c;毕业后因为自身能力问题、认知水平问题&#xff0c;再加上运气不好&#xff0c;换过多份工作&…...

Python导入模块的3种方式

很多初学者经常遇到这样的问题&#xff0c;即自定义 Python 模板后&#xff0c;在其它文件中用 import&#xff08;或 from...import&#xff09; 语句引入该文件时&#xff0c;Python 解释器同时如下错误&#xff1a;ModuleNotFoundError: No module named 模块名意思是 Pytho…...

select 与 where、order by、limit 子句执行优先级比较

当 select 和 其他三种语句的一者或者多者同时出现时&#xff0c;他们之间是存在执行先后顺序的。 他们的优先级顺序是&#xff1a;where > select > order by > limit 目录 1、select 与 where 2、select 与 order by 3、order by 与 limit 4、优先级证明 1、s…...

Linux内核并发与竞争-原子操作

一.原子操作的概念首先看一下原子操作&#xff0c;原子操作就是指不能再进一步分割的操作&#xff0c;一般原子操作用于变量或者位操作。假如现在要对无符号整形变量 a 赋值&#xff0c;值为 3&#xff0c;对于 C 语言来讲很简单&#xff0c;直接就是&#xff1a; a3但是 C 语言…...

Java笔记-泛型的使用

参考&#xff1a; Java 泛型&#xff0c;你了解类型擦除吗&#xff1f; 泛型的使用 1、泛型的定义 可以广泛使用的类型&#xff0c;一种较为准确的说法就是为了参数化类型&#xff0c;或者说可以将类型当作参数传递给一个类或者是方法。 2、泛型的使用 2.1泛型类 public c…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...