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.
我有一个观察事件并保存记录的无状态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.