我有一个实体,其中属性之一是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
}
答案 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可以为您提供有关合并的更多信息。