Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @事务-如何在同一事务中提交到另一个方法_Java_Spring_Hibernate_Transactions - Fatal编程技术网

Java @事务-如何在同一事务中提交到另一个方法

Java @事务-如何在同一事务中提交到另一个方法,java,spring,hibernate,transactions,Java,Spring,Hibernate,Transactions,我有一个使用@Transactional annotation的方法,在这个方法中,我有一个持久化一个实体的方法,而下一个方法使用这个尚未持久化的持久化实体,因为使用@Transactional的方法没有完成 最好的方法是什么?我考虑REQUIRED_NEW,但当这是一个新的事务时,如果外部事务失败,它不会全部失败 谢谢 保罗 在同一事务边界内-您所做的任何更改(创建或更新)都将可见。我相信您需要在方法调用之间调用flush()方法 // Create code entityManager.f

我有一个使用@Transactional annotation的方法,在这个方法中,我有一个持久化一个实体的方法,而下一个方法使用这个尚未持久化的持久化实体,因为使用@Transactional的方法没有完成

最好的方法是什么?我考虑REQUIRED_NEW,但当这是一个新的事务时,如果外部事务失败,它不会全部失败

谢谢

保罗


在同一事务边界内-您所做的任何更改(创建或更新)都将可见。我相信您需要在方法调用之间调用flush()方法

// Create code 
entityManager.flush(); // If you use JPA, or it will be session.flush() for hibernate
// Update code goes here

仅当显式调用flush()或搜索实体或提交事务时,才会刷新持久性上下文。只有在这些情况下,您所做的更改才可用。

您需要以何种方式使用持久化实体?你能分享一段代码片段或更详细的用例吗?有些代码真的很有用。我猜想这不是事务的问题(所有调用都在同一事务中,因此新创建的对象应该可见),而是持久性提供程序没有将操作刷新到数据库的问题。尝试手动刷新,看看是否有帮助。对不起,我举了一个代码示例,它确实有帮助。我不太清楚为什么updatePrice方法返回PriceService。update price方法主体可能看起来像
return session.merge(price)
,它将返回合并的实例,然后您可以使用该实例。很抱歉,这是一个糟糕的示例…但问题是,当我更新价格时,数据库没有更新,当我发送到队列时,存在另一个侦听器,该侦听器从队列中获取id并将更新价格发送到另一个系统。但是,当我将价格发送到队列时,侦听器会更快地接受未更新的价格。。。
// Create code 
entityManager.flush(); // If you use JPA, or it will be session.flush() for hibernate
// Update code goes here