正在刷新实体 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 可以为您提供更多关于合并的信息。
我有一个实体,其中一个属性是 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 可以为您提供更多关于合并的信息。