推荐实体过帐交易

时间:2018-11-09 11:27:59

标签: java database spring jpa database-trigger

我有一个实体,其中属性之一是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的实体,但这将开始新的事务并基本上再次获取整个实体,这似乎是一个糟糕的解决方案。可以在存储库的create方法中获取插入时间吗?实体管理者refresh()不会成功,因为它仍然是同一笔交易

我的创建方法大致如下:

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

2 个答案:

答案 0 :(得分:1)

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

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

    return entity
}

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

答案 1 :(得分:0)

有一个merge命令可以帮助您获得结果。

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

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