我有一个无状态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?
答案 0 :(得分:0)
persist()
并不意味着立即插入行,而是在刷新时间,通常在事务提交之前。
但是,如果这不是您要求的,但即使在事务结束后仍未插入行,则可能是该事务的刷新模式设置为manual。