最近在使用框架 spring+jpa+cxf 部署一个服务,出现的问题!
事务部分:
在Service的一个方法中,定义好了事务完整性控制
如:
Dao:
public class UserDao{
@PersistenceContext
private EntityManager em;
public User saveOrUpdate(User u){
//code
return em.merge(u);
}
public boolean updateUserBySql(String jpa){
try{
em.createQuery(sql).executeUpdate();
return true;
}catch(Exception e){
return false;
}
}
}
public class UserServiceImpl{
@Autowired
private UserDao userDao;
@Autowired
private TransactionService tranService;
//中间进行缓存基本配置信息的获取(每隔半小时加载一次配置表里面信息)
@Autowired
private CommonService commonService;
public Aresp updateUserTradeOrders(Areq req){
TransactionStatus status = tranService.getTransactionStatus();
try{
User u = XXXX(req); //把req对象变成需要的user对象
String jpa = “update user sql”; //把该用户所有的状态为有效变成无效Sql
boolean bool = userDao.updateUserBySql(jpa);
if(bool){
userDao.saveOrUpdate(u)
}
Aresp a = Aresp.createSuccess();
a.setDesc(commonService.getSysconfig(a.getCode));
transService.commit(status);
return a;
}catch(Exception e){
e.pr;
transService.rollback(status);
return Aresp.createFaild();
}
}
}
CommonService 中方法是每隔半小时进行一个refluse,在refluse时候,会对em进行clear()调用,
提供方法的接口,测试都没有问题! 后来测试时候突然发现半小时一次的,会更新掉用户信息为无效,但是没有把新增的实体保存,出现疑问:
1.虽然我代码不合理,理论应该是先commit在去获取描述语,但是我clear()调用后,也不存在以前有效状态被修改为无效
2. clear()为什么不能把所有的都清楚,都不变动我的数据,执行一半破坏事务的完整性,我使用事务控制的初衷
查看jpa的clear()方式使用和实践:clear()方法分离所有当前正在被管理的实体
em.clear()把实体管理器中所有的实体对象编程游离状态
merge是把实体与数据库同步
通过两点分析,如果。先merge一个不存在库中数据,然后clear 在commit的对象是不会保存到库中,如果库中一开始就存在这条记录的时候,commit后,会被更新
分享到:
相关推荐
JPA 批注的详细说明文档,自己整理的。
对java jpa的使用方法做了一些描述。希望对大家有帮助
JPA 规范部分详细的介绍了 JPA 中实体 Bean 的定义,并介绍了实体 Bean 支持的注释、全新的查询语言、实体管理接口、容器实现规范等内容。 JPA 标准制定过程中充分吸收了目前已经出现的所有持久化技术的所有优点,...
基于java jpa层实现mysql数据库的建表、新增、变更数据操作; 提供完整的jar包文件在根目录 下
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
struts2 spring jpa操作数据库 级联数据 hibernate
java程序使用JPA注解详解.doc
Java Persistence API JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
java JPA 详细介绍 和 入门教程,东侧的是v
SpringBoot操作多数据源(JPA+JdbcTemplate)使用HikariCP数据源进行示例。
springboot+JPA 多数据源配置springboot+JPA 多数据源配置
springboot+mysql+jpa多数据源操作
事物JPA入门,样例和PPT~事物JPA入门,样例和PPT~事物JPA入门,样例和PPT
根据liger ui中的增加条件分组功能,实现的数据权限管理,页面生成json串,通过解析成sql,动态追加到对应的资源查询中,供大家参考
JPA 批注参考 JPA 批注参考 JPA 批注参考
使用springboot + JPA / MyBatis 实现多数据源动态切换
spring boot jpa多数据源配置,简单、快速、易懂,直接放入文件,修改对应的实体路径和repository路径即可.
JPA框架的集成使用 package com.itcast.bean.product; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @...
如何控制JPA的事务,非常全的。。如果不信就打开。够不够20,快够吧