Spring事务提交后部分实体没存到数据库

跟大队 2015-07-21 11:47:22
项目用的是SSH,在一个业务层的方法上method1使用了@Transactional注解,由于业务比较复杂这个方法需要调用到本类及另外一些类的方法,涉及到比较多的实体保存。方法正常结束事务自动提交后,在本类保存的实体都保存到数据库了,但是在另外一个类的一个方法method2中保存的实体在数据库中只保存了最后一次该方法保存的实体(比如 第一次进入方法中分别保存了ABC三个实体,第二次又保存了ABC三个实体,但是最终数据库只保存了第二次的ABC)。
method1和method2难道不是在同一事务中么?查了好久没有头绪,求各路大神们帮忙解答!菜鸟不胜感激啊。
...全文
464 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 11 楼 gukuitian 的回复:
贴下简要代码吧,
method1中的类有个方法是直接调用的method2: String sqlId = modelService.method2(models.get(0) .getModelId(), mo.getMonitorid(), ruleSql, colModelPropMap); 另外一个类中method2方法大概如下, public String method2(String modelId,String monitorObjectId, RuleSql ruleSql, List<Map<String, String>> list)throws RuntimeException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { MapRelation relation = new MapRelation(); MonitorObject monitor = new MonitorObject(); Model model = new Model(); String sqlId = ruleSql.getSqlId(); if (sqlId != null && !"".equals(sqlId)) { this.delPropertSqlColMapById(sqlId); this.delMapRelationById(sqlId); } if (list != null) { monitor.setMonitorid(monitorObjectId); ruleSql.setMonitorObject(monitor); ruleSql = ruleDao.saveEntity(ruleSql); model.setModelId(modelId); relation.setModel(model); relation.setRuleSql(ruleSql); relation = ruleDao.saveEntity(relation); PropertSqlcolMap sqlcol = new PropertSqlcolMap(); ModelProperties propert = new ModelProperties(); for (int i = 0; i < list.size(); i++) { Map map = list.get(i); Object key = map.get("modelPropertId"); Object value = map.get("columnName"); String modelPropertId = key != null ? key.toString() : null; String coloum = value != null ? value.toString() : null; sqlcol = new PropertSqlcolMap(); propert = new ModelProperties(); propert.setModelPropertId(modelPropertId); sqlcol.setMapRelation(relation); sqlcol.setSqlcolumn(coloum); sqlcol.setModelProperties(propert); ruleDao.saveEntity(sqlcol); }
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 12 楼 a913858 的回复:
那配置事务的地方配置method2啦吗
method1和method2都用@transactional注解了
西部落酋长 2015-07-21
  • 打赏
  • 举报
回复
那配置事务的地方配置method2啦吗
gukuitian 2015-07-21
  • 打赏
  • 举报
回复
贴下简要代码吧,
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 9 楼 anly_hz 的回复:
存对象的实体BEAN没有重新new吧
这个还真有。。
anly_hz 2015-07-21
  • 打赏
  • 举报
回复
存对象的实体BEAN没有重新new吧
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 6 楼 dongwanli_csdn123 的回复:
method1和method2可以存在同一事物吧!
是的,之前用的是同一个事务
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 5 楼 gukuitian 的回复:
你可以先把事务注解去掉试试, 假如还是一样的话,就是代码的问题了
去掉失误之后可以哦
董小姐_123 2015-07-21
  • 打赏
  • 举报
回复
method1和method2可以存在同一事物吧!
gukuitian 2015-07-21
  • 打赏
  • 举报
回复
你可以先把事务注解去掉试试, 假如还是一样的话,就是代码的问题了
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 3 楼 gukuitian 的回复:
没看懂什么第一次,第二次的 感觉应该是你的代码逻辑有问题.
额,看代码就是method2被多次调用来完全相应的业务逻辑,每次调用都会保存一批实体。但是事务提交后数据库里面只保存了method2创建的最后一批实体。
gukuitian 2015-07-21
  • 打赏
  • 举报
回复
没看懂什么第一次,第二次的 感觉应该是你的代码逻辑有问题.
跟大队 2015-07-21
  • 打赏
  • 举报
回复
引用 1 楼 csdn2014517 的回复:
method2 用@Transactional注解了吗
method2已经注解了
csdn2014517 2015-07-21
  • 打赏
  • 举报
回复
method2 用@Transactional注解了吗

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧