Ho visto diverse domande simili con 0 buone risposte.JPA è impaziente di caricare le raccolte secondarie FetchType.LAZY
Questo dovrebbe essere molto semplice. Sto usando Java JPA e voglio caricare un elenco di entità figlio a volte, ma non sempre. Sfortunatamente, l'APP non sembra ascoltarmi quando dico di prenderlo pigramente. Ho reso sicuro al 100% che non c'è un posto nel mio codice in cui l'attributo childEntities sia accessibile in alcun modo. Tuttavia, tutte le entità figlio vengono ancora caricate immediatamente dopo la chiamata a JPA.em(). Find (..). Questo è il modo in cui dichiaro la relazione con le annotazioni.
@Entity
@Table(name = "parentEntities")
public class ParentEntity implements Serializable {
....
@OneToMany(mappedBy = "entityPropertyName", fetch = FetchType.LAZY)
public List<ChildEntity> childEntities;
...
}
e questo è come mi carico la controllante:
ParentEntity parentEntity = JPA.em().find(ParentEntity.class, id);
Inoltre, speravo di volte ansiosi prendere questa collezione e in grado di dire in modo dinamico APP quando a farlo. Questo è il passaggio 2 però. Il passaggio 1 è solo per farlo funzionare correttamente.
Come stai verificando che sia inverosimile? Esiste un orm.xml o altre mappature di luoghi o possono essere impostati listener di entità che sovrascrivono l'impostazione lazy o attivano la raccolta? Quale fornitore stai usando? – Chris
Nel debugger posso vedere subito dopo la chiamata di ricerca che l'elenco è popolato. Non sto usando alcun XML per la configurazione, solo annotazioni. –
Per ora ho creato una soluzione estremamente prolissa e hacky. Ho creato due entità padre, una con la raccolta dell'elenco figlio e l'altra senza. Sfortunatamente, questo hack (come fanno molti hack) riversa la sporcizia nel resto del mio codice. –