JPA найти и обновить стратегию - PullRequest
0 голосов
/ 18 января 2012

В моей реализации JPA я выполняю em.find (), чтобы выбрать список объектов и изменить эти объекты. Далее я обновляю эти измененные объекты, вызывая em.merge () внутри транзакции (TX, чтобы сохранить другие объекты).сопутствующие материалы).

Это прекрасно работает, за исключением того факта, что SELECT происходит дважды (один раз во время поиска, а другой - во время другого), что, как мне кажется, является избыточным и снижает производительность в моем случае.приведите find () в пределах транзакции em.merge (), даже если это решит последний SELECT.

Является ли определение моего собственного NamedQuery единственным способом обновления этих объектов без выдачи другого SELECT?

Спасибо

1 Ответ

0 голосов
/ 19 января 2012

Если вы используете управляемый JTA EntityManager, то каждая граница транзакции будет представлять собой новый контекст постоянства, и если у вас не настроен общий кэш, вам придется возвращаться в базу данных.

Какой провайдер JPA вы используете? Если вы используете EclipseLink, общий кэш включен по умолчанию.

Для транзакций JPA, если вы используете один и тот же EntityManager для поиска и слияния, он все равно должен находиться в контексте постоянства.

...