Является ли вызов persist () flush () и refresh () одним методом для правильного сохранения сущности?

Я намерен вернуть клиенту вновь сохраненную сущность в том же бизнес-вызове, чтобы получить сгенерированный первичный ключ, необходимый для дальнейшей бизнес-логики. Повторный вызов метода поиска для поиска объекта по имени или некоторым известным атрибутам приведет к повторному обращению ко второму серверу, которого я бы хотел избежать (время - деньги ;-). Итак, я создал следующий метод:

public Entity persist(Entity entity) {
    em.persist(entity);
    em.flush();
    em.refresh(entity);
    // now the entity has an id
    return entity;
}

Но теперь мне интересно, правильный ли это способ сделать это. Это как-то "странно". Спецификация JPA довольно четко об этом говорит: метод persist () EntityManager возвращает void - для меня это звучит как «выстрелил и забыл». Но мой клиент зависит от первичного ключа. Есть ли альтернативное решение описанному выше методу? Это лучшая практика в моем случае? Как вы думаете?

11
задан mwalter 26 August 2011 в 15:16
поделиться