我一直在寻找将JTA事务从Java代码传播到Oracle存储过程的可能性,并且没有发现真正相关的东西。我问这个是因为同事正在使用这个并且告诉我它对他有用。
我想知道的是,某些操作尚未刷新,因为事务仍然打开并且随后调用了存储过程(此过程不控制它自己的事务),存储过程是否能够看到持久化语境中的悬挂操作?换句话说,持久化上下文是否会以某种方式与下层数据库的事务内存同步?
我正在攻读Oracle JPA考试,我正在阅读的这本书没有描述。但是我在一些网站上看到我用Google搜索并且人们说这样的事务传播是有效的,因为在某些JDBC驱动程序中JTA和数据库事务之间存在集成(我无法想象它是如何工作的,事务管理器是否意识到数据库事务??)。
提前致谢!
答案 0 :(得分:2)
我使用Spring + Hibernate和自行开发的框架+ Hibernate做了同样的事情。我相信同样的事情也适用于JPA。
如果您在与JPA相同的交易中呼叫您的SP,一切顺利,唯一的问题就是您提到的,所以在拨打SP之前,只需在flush()
上拨打persistenceManager
,您在实体上所做的修改将在交易的上下文中写入DB。