正在刷新实体 post 笔交易

Refresing entity post transaction

我有一个实体,其中一个属性是 insert_time。 插入时间不是在应用程序中填写的,而是通过数据库触发器填写的。

CREATE OR REPLACE TRIGGER ENTITY_NAME_CT
BEFORE INSERT ON ENTITY_NAME
FOR EACH ROW
BEGIN
:new.CREATE_TIME := CURRENT_TIMESTAMP;
END;

如何在我的应用程序中获取插入时间?我知道可以从我的服务中调用实体存储库来搜索具有给定 ID 的实体,但这将开始新的事务并基本上再次获取整个实体,这似乎是一个糟糕的解决方案。可以在存储库的创建方法中获取插入时间吗?实体管理器 refresh() 不会成功,因为它仍然是相同的事务

我的创建方法大致如下所示:

@Transactional
public Comment createEntity(Entity entity) {
    entityManager.persist(entity);
    return entity
}

您可以尝试先刷新再刷新:

@Transactional
public Comment createEntity(Entity entity) {
    entityManager.persist(comment);
    entityManager.flush();
    entityManager.refresh(comment);    

    return entity
}

只需确保该连接/事务的刷新模式设置为 FlushModeType.AUTO 而不是 COMMIT

有一个merge命令可以帮助您实现结果。

@Transactional
public Entity createEntity(Entity entity) {
    return entityManager.merge(entity);
}

This question 可以为您提供更多关于合并的信息。