Я использую Glassfish и Java EE 6. Я создал спокойный веб-сервис с Джерси, который выполняет поисковые операции на таблице Comment
. У каждого комментария есть Author
.JPA (Eclipselink impl) ленивая выборка за пределами транзакции
У меня есть @Stateless
, @Path('comments')
EJB прослушивание Http-запросов. Тогда у меня есть этот метод:
@GET
@Path("search")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public List<Comment> getComments(@QueryParam("criteria").....)
Мой запрос JPA дает кучу комментариев. Каждый комментарий имеет связь с его Автором, который также извлекается, поскольку он не установлен в LAZY, но, кроме его идентификатора, большинство полей автора не извлекаются (например, имя автора), хотя я попытался установить их на @Basic(fetch = FetchType.EAGER)
. Это получает извлекаться, когда я делаю что-то вроде:
comment.getAuthor().getName()
Но это работает, если я внутри транзакции, поэтому контекст Постоянство жив на протяжении исполнения моего метода. Тем не менее, я не хочу использовать транзакцию здесь, поскольку это просто поиск в базе данных и не изменение каких-либо данных (следовательно, @TransactionAttribute(...NOT_SUPPORTED)
), поэтому, когда я вызываю getter выше, я просто получаю «null» (никаких данных не извлекается) , и я не знаю, как это исправить.
Я не хочу использовать транзакцию, но хочу, чтобы Eclipselink получал атрибуты автора с нетерпением.
EDIT:
Поскольку я не в рамках транзакции, просто говоря, что я хочу для EclipseLink, чтобы получить мое поле «comment.author.name» за каждый комментарий я получаю от моего запроса.