1

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

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

@Component
public class MyBean {

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

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

谢谢。

4

1 回答 1

4

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

尝试从另一个 bean(MyBean 被注入的地方)调用 的init()方法MyBean,甚至从ServletContextListener.

于 2012-06-10T13:34:21.367 回答