gpt4 book ai didi

java - Spring @Transactional 不适用于 mysql 函数调用

转载 作者:行者123 更新时间:2023-11-29 10:22:08 25 4
gpt4 key购买 nike

我的项目中有一个现有代码,它调用 mysql 函数。 mysql 函数更新表中的值。

function next_val (input varchar(10))
returns decimal(5,0)
begin
update table set val = (@next_val := next_val) + inc where name = input;
return @next_val;
end

在 Spring 代码中,我使用 javax.entitymanager 调用该函数

em.createNativeQuery("select next_val('DB') from dual");

我使用 @transactional 注释调用上述方法,但此调用自动提交函数结果。

我无法因任何错误而撤销

最佳答案

您必须从另一个 bean 调用 @Transactional 方法,并且该方法必须是公共(public)的。请参阅Spring docs :

In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation, in effect, a method within the target object calling another method of the target object, will not lead to an actual transaction at runtime even if the invoked method is marked with @Transactional. Also, the proxy must be fully initialized to provide the expected behaviour so you should not rely on this feature in your initialization code, i.e. @PostConstruct.

您可以通过使用 AspectJ 而不是默认代理模式来解决这个问题。

关于java - Spring @Transactional 不适用于 mysql 函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49064336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com