¿Cómo puedo hacer paginación con las colecciones de @OneToMany?
Supongamos que tengo una entidad de publicación y una entidad de comentario y una relación de uno a muchos:
@Entity class Post {
...
@OneToMany
List<Comment> comments;
...
}
¿Cómo puedo lograr una paginación como esta?
Post post = //Find the post.
return post.getComments().fetch(100, 10); // Find the 11th page (page size 10);
¿Es posible emular la paginación dinámica con colecciones @OneToMany sobre JPA, o tenemos que reescribir totalmente el mecanismo de asociación de JPA? (por ejemplo, cree un tipo de colección PersistentList que pueda administrar la paginación, la clasificación y la búsqueda).
P.S .: Hace poco encontré Play! framework usa una lib muy interesante sobre JPA: Siena. Siena es muy fácil de usar y es una buena abstracción además de JPA / Hibernate. Pero no puedo encontrar cómo hacer paginación con sus asociaciones.
Actualizar:
Play Framework tiene una sintaxis de consulta similar a Django:
Post.findAll().from(100).fetch(10); // paging
dónde
Post.findAll()
devolverá un objeto JPAQuery, un tipo de consulta personalizada en Play.
Pero con colecciones asociadas, por ejemplo:
Post.comments
solo devolverá una Lista, que no admite paginación u otras consultas.
Me preguntaba cómo extenderlo, para que
Post.comments
también devolverá un objeto JPAQuery o similar, luego puede consultar en la colección "query":
Post.comments.from(100).fetch(10);
o inserte un nuevo comentario sin obtener ninguno de los comentarios:
Post.comments.add(new Comment(...));
En mi primer pensamiento, podríamos crear una subclase de Lista, luego la clase Post se convertiría en:
@Entity class Post {
...
@OneToMany
QueryList<Comment> comments;
...
}
y QueryList tendrá métodos fetch (), from () que son indirectos a los de JPAQuery.
Pero no sé si Hibernate / JPA lo reconocerá o interferirá.