El problema real es la propia colección. Debería no modelar su dominio comercial de esta manera. Esta solución (de colecciones anotadas con @OneToMany
) solo es viable para colecciones pequeñas (docenas de objetos) y no para grandes (miles de objetos) lo cual puede ser el caso con comentarios. Realmente tienes que tener cuidado con ellos, ya que pueden crecer rápidamente fuera de control. Los estoy usando en este momento solo para modelar la colección de Role
asociada con un Account
, porque sé que ninguna cuenta tendrá más de 9 funciones en mi dominio y porque los roles en los que se encuentra una cuenta son muy importantes para trabajar con la cuenta Para todas las demás relaciones m-to, estoy usando simples consultas antiguas.
En lugar de añadir una colección de comentarios a su objeto, agregue una referencia al objeto en Comment
y explícitamente obtener los comentarios que desee mediante una consulta.
definir una consulta con nombre en Comment
para obtener los comentarios para un determinado objeto (vamos a usar Article
):
@Entity
@NamedQueries(value={
@NamedQuery(name=Comment.FOR_ARTICLE, query=
"SELECT c FROM Comment c WHERE c.article = :article"
)
})
public class Comment {
// ...
@ManyToOne
@JoinColumn(name = "articleId")
private Article article;
}
Entonces, el uso que da nombre a la consulta i.c.w. Query.setMaxResults y Query.setFirstResult para controlar de forma explícita el número de resultados a obtener y permitir la paginación, etc:
@PersistenceContext
EntityManager em;
Article theArticle = ...;
Query query = em.createNamedQuery(Comment.FOR_ARTICLE, Comment.class);
query.setParameter("article", theArticle);
query.setFirstResult(0);
query.setMaxResults(10);
List<Comment> comments = (List<Comment>) query.getResultList();
hacer la paginación, simplemente setFirstResult
para el primer resultado corresponde con la página que desea mostrar. P.EJ. para mostrar los resultados 20 .. 29, llamaría al setFirstResult(20)
.
posible duplicado de [Uso de anotaciones En JPA puedo limitar los registros secundarios con una cláusula where?] (Http://stackoverflow.com/questions/5857936/using-annotations-in-jpa-can-i-limit-child -records-with-a-where-clause) –
Esta publicación quiere restringir la cantidad de elementos que se conservan, mientras que la vinculada quiere recuperar los elementos que también tienen otros criterios. En consecuencia, no es un "duplicado exacto". – DataNucleus