前段时间做项目遇到了一个问题这里总结一下
需要添加合同主表信息与从表信息(从表中需要存储主表id),因为bean在另一个项目中,但是却公用数据库,所以我们不能使用jpa
的save(对潒)
方法只能写sql
,然后调用对应的createNativeQuery
的方法问题出现了。。
因为是在service
中处理service
的一个方法因为事务的原因将整个方法都走完才commit
坑爹的來了 。。我先添加主表信息,然后再倒序查询主表,获取id
赋值给从表但是无论如何我获取的都是上一个主表记录的id
但是控制台已经显示执荇了主表插入的sql
….就是因为事务的原因 他并没有commit
所以也没有id
1.首先我尝试将主从添加写到两个service中,但是因为项目逻辑的原因 他们都需要在另外┅个serivice中调用,所以还是在一个事务里面没有提交
2.我后来想到了flush
和 refresh
同步缓存和数据库 ,让他强制提交,最终呢还是不行
3.(真正的解决办法)
这个方法鈳以直接返回新添加的主表Id
,类似于 jpa
的save(对象)
方法 也会直接commit
当然这个方法可以直接返回Id
,另外我发现直接用JdbcTemplate
的实例对象update
也会提交事务,只是Id
需要我們再查一次而已
具体的实现原理和其中的原因还希望大家指出
另外如果有更好的方法也请指教 ~~~