【问题标题】:JPA (hibernate) does not insert on persist, needs to be flushedJPA(休眠)不会插入持久化,需要刷新
【发布时间】:2015-05-30 21:17:19
【问题描述】:

我有一个观察事件并保存记录的无状态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 而结束但不提交?

【问题讨论】:

  • 您可能稍后会回滚事务。有什么例外吗?
  • 嗯嗯有趣的一点。我没有看到它在日志中回滚,但有人吞下该异常的可能性很小......我可能需要对此进行调查。

标签: java hibernate jakarta-ee jpa ejb


【解决方案1】:

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

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

【讨论】:

  • 我没有使用任何特定于休眠的东西,因为我想避免阅读这种不可移植的文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多