Обновление сущности после транзакции - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть сущность, одним из атрибутов которой является insert_time. Время вставки заполняется не в приложении, а через триггер базы данных.

CREATE OR REPLACE TRIGGER ENTITY_NAME_CT
BEFORE INSERT ON ENTITY_NAME
FOR EACH ROW
BEGIN
:new.CREATE_TIME := CURRENT_TIMESTAMP;
END;

как я могу получить время вставки в моем приложении? Я знаю, что я могу вызвать хранилище сущностей из моего сервиса для поиска сущности с заданным идентификатором, но это начнет новую транзакцию и снова вызовет целую сущность, что кажется плохим решением. Может ли время вставки быть извлечено в методе создания хранилища? менеджер сущностей refresh () не справится с задачей, так как его все та же транзакция

Мой метод создания выглядит примерно так:

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

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Существует команда merge, которая может помочь вам достичь результата.

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

Этот вопрос может предоставить вам более подробную информацию о слиянии.

0 голосов
/ 09 ноября 2018

Вы можете попробовать очистку с последующим обновлением:

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

    return entity
}

Просто убедитесь, что для этого соединения / транзакции установлен режим очистки FlushModeType.AUTO, а не COMMIT.

...