Jfinal同一事务中已插入的数据记录在事务未提前前查询不到?
@JFinal 你好,想跟你请教个问题:
使用Jfina事务问题。用法如下
boolean result =Db.tx(new IAtom(){ @Override public boolean run() throws SQLException { //指定客户订单数据处理并写入; ApiResult insertCOrder = saveCustomerOrder(corder); if(insertCOrder.getStatus()!=ApiStatus.success){ return false; } return true; } });现在有两个问题
1在saveCustomerOrder方法里,有父子数据写入,在父数据写入后,子数据写入方法里有查询父数据存在性的处理,已插入未提交事务的情况下,已插入的数据库,查询不到,数据库用的sql server。好像表被锁住了。
2.这种事务使用方式里,内层调用了我的service方法,service层有save处理中断的消息返回,如何在run方法返回布尔变量的时候,也能将提示消息返回给外层方法?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
父数据的创建与子数据的创建不要在一个事务中,分步骤进行,可以先建好父数据
回复
不放到一个事务了,如何保证出现异常时候全部正确回滚?
引用来自“JFinal”的评论
1:由于父数据写入的事务未提交,所以数据无法在数据库中查询到,子数据后继依赖该父数据的操作也就无从谈起。可以在子数据插入时直接使用内存中的父数据,而不要去依赖在未来才被插入的数据。否则你需要这个功能分两步走,父数据插入与子数据插入不能在同一个事务中。
2:在语言层面,作者本人也希望方法可以有多个返回值,而 java 的限制只能有一个返回值。所以绕过去的办法是在外层定义一个 final ObjType[] value = new ObjType[1];,然后在内部事务方法中通过 value[0] = result; 来接收返回值,当然你还可以通过 Map List 这些集合类来接收,举一反三。
jfinal 2.0 将对 Tx 事务有外层处理改进,将来对 Db.tx(...) 的使用需求会减少,到那时就很方便传递参数了。
引用来自“JFinal”的评论
1:由于父数据写入的事务未提交,所以数据无法在数据库中查询到,子数据后继依赖该父数据的操作也就无从谈起。可以在子数据插入时直接使用内存中的父数据,而不要去依赖在未来才被插入的数据。否则你需要这个功能分两步走,父数据插入与子数据插入不能在同一个事务中。
2:在语言层面,作者本人也希望方法可以有多个返回值,而 java 的限制只能有一个返回值。所以绕过去的办法是在外层定义一个 final ObjType[] value = new ObjType[1];,然后在内部事务方法中通过 value[0] = result; 来接收返回值,当然你还可以通过 Map List 这些集合类来接收,举一反三。
jfinal 2.0 将对 Tx 事务有外层处理改进,将来对 Db.tx(...) 的使用需求会减少,到那时就很方便传递参数了。
1:由于父数据写入的事务未提交,所以数据无法在数据库中查询到,子数据后继依赖该父数据的操作也就无从谈起。可以在子数据插入时直接使用内存中的父数据,而不要去依赖在未来才被插入的数据。否则你需要这个功能分两步走,父数据插入与子数据插入不能在同一个事务中。
2:在语言层面,作者本人也希望方法可以有多个返回值,而 java 的限制只能有一个返回值。所以绕过去的办法是在外层定义一个 final ObjType[] value = new ObjType[1];,然后在内部事务方法中通过 value[0] = result; 来接收返回值,当然你还可以通过 Map List 这些集合类来接收,举一反三。
jfinal 2.0 将对 Tx 事务有外层处理改进,将来对 Db.tx(...) 的使用需求会减少,到那时就很方便传递参数了。