gpt4 book ai didi

java - Spring @Transactional 注释不起作用

转载 作者:行者123 更新时间:2023-12-03 23:13:35 25 4
gpt4 key购买 nike

我正在尝试在以下方法中运行 entityManager.merge(myEntity) 但似乎忽略了 @Transactional 注释。 Hibernate 配置似乎很好,因为我可以成功地从数据库中获取数据,但无法写入数据库。我正在使用 Spring 3.2.3 版。为什么写入数据库操作不起作用?

我的方法不起作用

package  com.reflections.importer.bls;
...

@Service
class BlsGovImporter {

...

@Transactional
private void importSeries(String externalId) {
// This works. The dao is using EntityManager too
Series series = seriesDao.findByExternalId(externalId);

series.getValues().addAll(fetchNewValues());

// This does not work and no exception is thrown
entityManager.merge(series);
}

最佳答案

因为它用于私有(private)方法。 Spring Docs :

Method visibility and @Transactional

When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.



当它是私有(private)的时,它显然是从同一个类中调用的。但是 Spring 调用需要通过代理才能使其正常工作。因此,需要从另一个 bean 调用该方法。

其他选项是使用@Transactional 注释类。

关于java - Spring @Transactional 注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32156652/

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