繁体   English   中英

Spring Roo的JPA PostUpdate

[英]JPA PostUpdate with Spring Roo

我正在一个项目上使用Spring Roo 1.2.3,并且在更新实体Stock时需要创建另一个实体X的新记录。 我会做这样的事情(类似于数据库中的触发器更新)。

@PostPersist
@PostUpdate
private void triggerStock() {
    Calendar fechaActual = Calendar.getInstance();      
    Long cantidad = this.getCantidadStock() - this.getCantidadAnterior();

    StockHistory history = new StockHistory();
    history.setArticulo(this.getArticulo());
    history.setFecha(fechaActual);
    history.setCantidad(cantidad);
    history.persist();      
}

当应用程序退出此方法时,将引发错误并且不保存新元素X。

但是如果我通过以下方法更改最后一个方法:

@PostPersist
@PostUpdate
private void triggerStock() {
    Calendar fechaActual = Calendar.getInstance();      
    Long cantidad = this.getCantidadStock() - this.getCantidadAnterior();

    StockHistory history = new StockHistory();
    history.setArticulo(this.getArticulo());
    history.setFecha(fechaActual);
    history.setCantidad(cantidad);

    EntityManagerFactory emf = entityManager().getEntityManagerFactory();
    EntityManager em = emf.createEntityManager();   
    em.getTransaction().begin();
    em.setFlushMode(FlushModeType.COMMIT);      
    em.persist(history);
    em.getTransaction().commit();
    em.close();         
}

这可以正常工作,但是我想理解为什么我需要一个新的EntityManager才能起作用?

谢谢...

在提交期间调用PostUpdate,持久性单元已经确定了更改内容和需要编写的内容,因此更改内容为时已晚(然后需要重新计算其再次编写的内容)。

根据所使用的JPA提供程序,有一些方法可以强制从事件中写入内容,但是您需要小心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM