Spring Data JPA 自动更新数据

描述:实体对象属于托管状态下时,往这个对象里面的某个属性 set 新的值,这个新的值会被更新到数据表中去。

使用 EntityManager.contains(entity) 方法可以得知某个实体对象是否处于托管状态,也就是说是否处于 persistence context 中。
使用 EntityManager.clear() 方法可以将处于 persistence context 范围中的托管对象变为游离对象,这时重置属性值不会更新到数据表中去。
 
persistence context 有两种类型。一种称为 transaction-scope persistence context,在这种状态下 persistence context 是与事务相关的,也就是说在事务范围内托管对象所有的更改都会被更新到数据表中去,当事务提交后,这个 persistence context 也就销毁了,之后的更改不会被更新到数据表中去。
 
另一种称为 extended persistence context,在这种状态下 persistence context 并不会因事务提交而销毁,而是可以跨事务的,具体的销毁与客户端请求有关,一般用于 Stateful Session Bean 中。
 
一般使用的 persistence context 都是默认的 transaction-scoped,extended 的很少用到。

在 transaction-scoped 环境中,受托管的实体对象并在事务环境中,这时重置属性值会更新到数据表中去。如果实体对象为游离对象,也就是说已经从 persistence context 游离出来了,这时重置属性值不会更新到数据表中去,如果需要将游离对象重置的值更新到数据表中去,需要使用 EntityManager#merge(entity) 方法,将该游离对象纳入当前 persistence context 的管辖之中重新成为托管对象。

@PersistenceContext private EntityManager entityManager;



...{
---省略代码---
ScorePoint scorePoint = scorePointSecDao.findScorePointById(groupId,scorePointId);
if( entityManager.contains(scorePoint)){
logger.info("实体对象属于托管状态下时,往这个对象里面的某个属性 set 新的值,这个新的值会被更新到数据表中去。"
+ "使用 EntityManager#contains(entity) 方法可以得知某个实体对象是否处于托管状态,也就是说是否处于 persistence context 中");
entityManager.clear();
logger.info("entityManager.clear()方法被调用,已经被清理");
}

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值