Ho un problema con le relazioni di EAGER in una grande applicazione. Alcune entità in questa applicazione hanno associazioni EAGER
con altre entità. Questo diventa "veleno" in alcune funzionalità.Ignora un FetchType.EAGER in una relazione
Ora il mio team ha bisogno di ottimizzare queste funzionalità, ma non possiamo cambiare il tipo di recupero in LAZY, perché avremmo bisogno di rifattorizzare l'intera applicazione.
Quindi, la mia domanda: c'è un modo per fare una query specifica ignorando le associazioni di EAGER nella mia entità restituita?
Esempio: quando ho questa persona Persona, vorrei non portare l'elenco di indirizzi quando faccio una query per trovare una persona.
@Entity
public class Person {
@Column
private String name;
@OneToMany(fetch=FetchType.EAGER)
private List<String> address;
}
Query query = EntityManager.createQuery("FROM Person person");
//list of person without the address list! But how???
List<Person> resultList = query.getResultList();
Grazie!
Aggiornato
L'unico modo che ho trovato non restituisce l'entità, tornando solo alcuni campi dell'entità. Ma mi piacerebbe trovare una soluzione che possa restituire all'entità (nel mio esempio, l'entità Person
).
Sto pensando se è possibile mappare due volte la stessa tabella in Hibernate. In questo modo, posso mappare la stessa tabella senza le associazioni EAGER. Questo mi aiuterà in alcuni casi ...
http://stackoverflow.com/questions/10997321/how-to-override-fetchtype-eager-to-be-lazy-at-runtime?lq=1 –
Forse stai meglio refactoring. In genere, EAGER verrebbe utilizzato solo per relazioni banali, se così fosse. Meglio avere tutto a LAZY e poi ottenere l'extra quando sai che ne hai bisogno. –
Ciao @Nicholas! È la soluzione migliore Purtroppo, non è possibile refactoring tutte le entità perché c'è un sacco di impatto nell'applicazione. – Dherik