【问题标题】:is there a way to update an entity after any update of other entities?有没有办法在更新其他实体后更新实体?
【发布时间】:2018-08-14 06:53:51
【问题描述】:

我在春天有一个项目,我想在一个实体上设置一个标志,这意味着任何其他实体都被修改了。因此,在对这些实体进行任何更新时,我必须对我的实体进行另一次更新。你知道正确的方法吗?

【问题讨论】:

  • 你应该提供更多关于你的项目和数据库的细节
  • 详细信息是什么?
  • 您使用的是哪个数据库?你是如何与数据库通信的?
  • PostgreSQL Spring JPA

标签: java spring


【解决方案1】:

你可以这样做,感谢this answer

@Component
public class MyEventListener implements PreInsertEventListener {

    private static final long serialVersionUID = 1L;

    @Autowired
    private EntityManagerFactory entityManagerFactory;

    @Autowired
    private AuditRepository auditRepository;

    @PostConstruct
    private void init() {
        SessionFactoryImpl sessionFactory = entityManagerFactory.unwrap(SessionFactoryImpl.class);
        EventListenerRegistry registry = sessionFactory.getServiceRegistry().getService(EventListenerRegistry.class);
        registry.getEventListenerGroup(EventType.PRE_INSERT).appendListener(this);
    }

    @Override
    public boolean onPreInsert(PreInsertEvent preInsertEvent) {
        Object entity = preInsertEvent.getEntity();
        if (Customer.class.isInstance(entity)) {
            auditRepository.save(new Audit("inserted " + entity));
        }
        return false;
    }
}

【讨论】:

  • 这行得通吗?我不这么认为。我遇到了类似的情况,类似这样的代码我会得到一个 ConcurrentModificationException 异常,因为您将一个新实体保存到正在保存的实体列表中,并且在调用侦听器时它正在被迭代
  • @dchang 是的,我当时测试过,here 是我的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多