JPA(hibernate)不会在persist上插入,需要刷新

时间:2015-05-30 21:17:19

标签: java hibernate java-ee jpa ejb

我有一个无状态bean,可以观察事件并保存记录:

@Stateless
public class Manager {
    @Inject
    Repository repository;

    Manager() {}

    @Inject
    Manager(Repository repository) {
        this.repository = repository;
    }

    public void EventHandler(@Observes MyEvent myEvent) {
        save(event.obj);
    }

    private save(Object object) {
        repository.add(object);
    }
}

我的存储库是这样的:

@Stateless
public class Repository {
    @PersistenceContext
    EntityManager em;

    Repository() {}

    public void add(Object object) {
        em.persist(object);
        // em.flush();  <---
    }
}

除非我取消注释,否则它无效 我不明白的是为什么我需要冲洗!交易不应该自动提交吗?

可能是因为我有一个EJB容器而且Observes启动的cdi事务从未实际结束但是做了一些奇怪的事情吗?或者它结束但是没有提交,因为他不了解EJB?

1 个答案:

答案 0 :(得分:0)

persist()并不意味着立即插入行,而是在刷新时间,通常在事务提交之前。

但是,如果这不是您要求的,但即使在事务结束后仍未插入行,则可能是该事务的刷新模式设置为manual