java - 交易后刷新实体

标签 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 的实体,但这将开始新的事务并基本上再次获取整个实体,这似乎是一个糟糕的解决方案。可以在存储库的创建方法中获取插入时间吗?实体管理器 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

关于java - 交易后刷新实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53224884/

相关文章:

Spring Boot 多个端口?

java - 如何在选项卡式 Activity 中切换回上一个选项卡

java - 有没有办法动态地从不同的类获取所有静态字段及其值?

java - 如何用使用 Java 泛型的单个方法替换这些特定于类型的方法?

mysql - 安装 magento,出现数据库连接错误。

mysql - 数据库 : Migrate data between MS Access DB and MYSQL

c# - 多字段搜索

java - 带有 spring jdbc 的 sql 模式

java 日期值显示不正确

java - 有关本地安装 Java EE 的问题吗?