2015-03-26 2 views
1

Возможно ли с помощью SqlResultSetMapping и entityManager.createNativeQuery выбрать объект с One2Many отношениями из двух разных таблиц?SqlResultSetMapping собственный SQL-запрос и отношения One2Many

Например

@Entity 
@Table(name = "posts") 
public class Post { 
    @OneToMany(mappedBy = "post") 
    private List<Comment> comments; 
} 

@Entity 
@Table(name = "comments") 
public class Comment { 
    @ManyToOne(optional = false) 
    @JoinColumn(name = "post_id", referencedColumnName = "post_id") 
    private Post post; 
} 

Запрос:

select p.*, c.* from posts p left join (
    select * from comments where content like "%test%" order by last_edited limit 0, 3) 
as c on p.post_id = c.post_id 

на основе родной SQL запрос Мне нужно получать сообщения объекты с комментариями.

Я имею ввиду - в результате мне нужно получить список сообщений, и каждое сообщение этого списка уже заполнено соответствующими комментариями.

Возможно ли это с JPA? Если да, не могли бы вы показать пример?

ответ

0

Вы можете сделать что-то вроде этого:

SELECT post from Post post 
LEFT JOIN FETCH post.comments -- to fetch all comments in each post 
LEFT JOIN FETCH post.comments comment -- to do the WHERE 
WHERE comment.content like "%test%" 

Проблема заключается в order by last_edited. Я думаю, что вы не можете заказать сгружен список комментариев в JPA, но вы можете поместить эту аннотацию в private List<Comment> comments;, чтобы установить порядок по умолчанию в коллекции:

@OneToMany(mappedBy = "post") 
@OrderBy("lastEdited asc") 
private List<Comment> comments; 

И, наконец, к limit, используйте методы firstResult и maxResultsfrom JPA

return em.createQuery(query) 
     .setFirstResult(0) // offset 
     .setMaxResults(3) // limit 
     .getResultList(); 
Смежные вопросы