Как предлагается в комментариях, я бы пошел к более простому решению, как
List<Integer> myList = ....; // place here your ids
TypedQuery<UserAccount> q = em.createQuery("select u from UserAccount u where u.id in (:myList)", UserAccount.class);
или эквивалентный запрос с использованием CriteriaBuilder
и метамодели:
Root<UserAccount> root = q.from(UserAccount.class);
Expression<Integer> exp = root.get(UserAccount_.id);
Predicate predicate = exp.in(myList);
criteria.where(predicate);
Возвращаемое resultList
содержит экземпляры сущностей, которые присоединены к PersistenceContext
. Это означает, что вы сможете без труда получить свойства Transient
.
Относительно производительности могут быть заметные различия только в экстремальных ситуациях, например, когда размер возвращаемого списка очень большой или когда вам приходится повторять этот запрос с высокой частотой. Но это требует глубокого анализа.