JPA(休眠)不插入持久,需要刷新

JPA (hibernate) does not insert on persist, needs to be flushed

我有一个观察事件并保存记录的无状态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就结束了但是没有commit?

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

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