【问题标题】:Refresing entity post transaction刷新实体发布交易
【发布时间】:2018-11-09 11:27:59
【问题描述】:

我有一个实体,其中一个属性是 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() 不会起作用,因为它仍然是相同的事务

我的 create 方法或多或少是这样的:

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

【问题讨论】:

  • 坚持(评论);什么评论?你是说实体吗?
  • @Tu.ma ye,我已经编辑了代码。

标签: java database spring jpa database-trigger


【解决方案1】:

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

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

    return entity
}

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多