gpt4 book ai didi

java - Transactional(readOnly=false) 仅在从 Servlet 调用时起作用

转载 作者:行者123 更新时间:2023-11-29 03:45:49 25 4
gpt4 key购买 nike

我正在尝试创建一个通过 JPA 操作数据库的 bean。这些方法都使用 @Transactional(readOnly = false) 正确注释 - 直到现在这是由 Servlet 调用处理的并且一切正常。

现在我想在它的 init 方法中做一些数据库操作:

@Component
public class MyBean {

@PostConstruct
@Transactional(readOnly = false)
public void init() {
MyEntity myEntity = ...;
...
em.persist(myEntity);
}

(案例已简化)。像这样我收到异常“没有 session 或 session 已关闭”。显然,事务只有在由 Servlet 中的请求运行时才能正确启动,而不是从实际的 bean 运行。我怎样才能通过从 bean 本身运行来实现这一点?

谢谢。

最佳答案

据我所知,Spring 不会使用您的 bean 周围的事务代理来调用 PostConstruct 方法(顺便说一句,大多数时候它们不是 bean 外部接口(interface)的一部分)。

尝试从另一个 bean(注入(inject) MyBean 的地方)或什至从 ServletContextListener 调用 MyBeaninit() 方法。

关于java - Transactional(readOnly=false) 仅在从 Servlet 调用时起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968614/

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