Questo è il mio soggetto:Hibernate ignora fetchgraph
public class PersonItem implements Serializable{
@Id
@Column(name="col1")
private String guid;
@Column(name="col2")
private String name;
@Column(name="col3")
private String surname;
@Column(name="col4")
private Date birthDate;
//+getters and setters
}
Questo è come ottenere l'elenco delle persone:
Query query = em.createQuery("Select p from PersonItem p WHERE p.guid IN (:guids)");
EntityGraph<PersonItem> eg = em.createEntityGraph(PersonItem.class);
eg.addAttributeNodes("guid");
eg.addAttributeNodes("name");
eg.addAttributeNodes("surname");
query.setHint("javax.persistence.fetchgraph", eg);
query.setParameter("guids", guids);
List<PersonItem> list=query.getResultList();
em.close();
// And now I iterate result AFTER EM CLOSE
....iterate
Se ho capito prendere grafico correcly deve caricare solo quei campi, che ho specificato. Tuttavia, viene caricato anche il campo "birthDate". Inoltre vedo che in hibernate sql query 4 colonne sono selezionate.
Come ripararlo? Io uso Hibernate 5.1.0 come provider JPA.
Il collegamento fornito sulla versione ibernata 3.3. Forse le cose sono cambiate da quel momento? –
Puoi commentare questa risposta: http://stackoverflow.com/a/37053402/5057736. Lì l'uomo dice che questo codice funziona con un altro provider jpa e questo è secondo le specifiche JPA. –
Può essere supportato se si utilizza l'ottimizzazione bytecode, inoltre, la mia risposta è specifica per Hibernate. Sono d'accordo che le specifiche JPA affermano che un fornitore può adottare entrambi gli approcci. Aggiornerò con i riferimenti pertinenti degli ultimi documenti. – Pace