2013-09-21 4 views
0

Я использую 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» за каждый комментарий я получаю от моего запроса.

ответ

0

Я решил это сейчас с помощью нестандартных EclipseLink «LoadGroup» возможность:

LoadGroup lg = new LoadGroup(); 
lg.addAttribute("author.name"); 
query.setHint(QueryHints.LOAD_GROUP, lg); 
result = query.getResultList(); 

Я ищу стандартный раствор, хотя.

Смежные вопросы