EntityManager 的常用 API(find、merge)

本文演示了如何通过RESTful API使用JPA更新数据库字段,包括find()和merge()方法的应用,解决事务缺失问题,并展示修改结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个Demo:浏览器访问rest接口,修改数据库字段信息,用到以下方法

find() 方法,类似于 Hibernate 中的 Session 的 get() 方法在执行 find 方法时就发送 SQL 语句

merge() 方法,类似于 Hibernate 中 Session 的 saveOrUpdate() 方法

 

 

 

1、先查看数据表 

这里选择id为25的,进行修改。

 

 

2、MyService写rest接口

@Path("/MyService")
@RequestScoped
//@Transactional(value = TxType.REQUIRED)
public class MyService {
		
	@Inject
	EntityManager em;
	
	@GET
	@Path("/testFind")
	@Produces("text/html; charset=UTF-8")
	public String testFind() {
		Member member = em.find(Member.class, 25);
		
		System.out.println("member:"+member.getName());
		System.out.println("member:"+member.getEmail());
		System.out.println("member:"+member.getPhoneNumber());

		member.setName("xingqiwu");
		em.merge(member);
		
		System.out.println("member:"+member.getName());
		System.out.println("member:"+member.getEmail());
		System.out.println("member:"+member.getPhoneNumber());
		
		return "ok";
	}
}

 

3、浏览器地址输入直接访问rest接口:http://localhost:8081/jboss-javaee-webapp/rest/MyService/testFind

会发现报错:

Transaction is required to perform this operation (either use a transaction or extended persistence context)

需要事务才能执行此操作(使用事务或扩展持久性上下文)

类上缺少 @Transactional(value = TxType.REQUIRED),特别注意添加。

 

@Transactional 解释:

https://blog.youkuaiyun.com/u013361361/article/details/19157249

https://blog.youkuaiyun.com/xiang__liu/article/details/80805967  解释很详细

在JPA实体状态中,该注解完成的是下面两步。

EntityManager 缓存中找到对应的对象,

调用merge方法,JPA会把传入的对象赋值到entityManager的缓存中的对象,然后对entityManager缓存中的对象执行update操作。

 

 

@Transactional 需要添加jar包,pom文件:

 

 

4、浏览器请求rest接口之后,查看结果

console:

数据表

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿姨不可以嘛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值