Il vero problema è la raccolta stessa. Si dovrebbe non modellare il proprio dominio aziendale in questo modo. Questa soluzione (delle raccolte annotate con @OneToMany
) è valida solo per le piccole raccolte (dozzine di oggetti) e non per quelle grandi (migliaia di oggetti) che possono benissimo essere il caso dei commenti. Devi davvero stare attento a loro perché possono rapidamente perdere il controllo. Al momento li utilizzo solo per modellare la raccolta di Role
s associata a uno Account
, perché so che nessun account avrà mai più di 9 ruoli nel mio dominio e perché i ruoli in cui è presente un account sono così molto vitali per funzionare con l'account. Per tutte le altre relazioni m-to-n sto usando semplici vecchie query.
Invece di aggiungere una raccolta di commenti al vostro oggetto, aggiungere un riferimento all'oggetto sul Comment
e esplicitamente ottenere i commenti che si desidera utilizzando una query.
definire una query di nome sulla Comment
per ottenere i commenti per un certo oggetto (usiamo 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;
}
Poi, l'uso che prende il nome di query i.c.w. Query.setMaxResults e Query.setFirstResult per controllare in modo esplicito il numero di risultati per ottenere e consentire per il paging, ecc:
@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();
Per fare di paging, solo setFirstResult
al primo risultato corrispondente la pagina che si desidera visualizzare. PER ESEMPIO. per mostrare i risultati 20 .. 29, chiamereste setFirstResult(20)
.
fonte
2015-11-16 10:31:39
possibile duplicato di [Utilizzo di annotazioni In JPA è possibile limitare i record figlio con una clausola where?] (Http://stackoverflow.com/questions/5857936/using-annotations-in-jpa-can-i-limit-child -records-with-a-where-clausole) –
Questo post vuole limitare quanti elementi sono persistenti, mentre quello collegato vuole recuperare gli elementi che hanno anche altri criteri. Di conseguenza non un "duplicato esatto". – DataNucleus