2010-06-26 12 views
10

Hola chicos soy nuevo en Hibernate y JPAJava Hibernate con persistencia Pregunta --- si FetchType no está definido, ¿cuál es el método predeterminado?

yo escribimos algunas funciones, en un principio, me puse fetch = FetchType.LAZY en la clase de entidad. Pero me dio error: "org.hibernate.LazyInitializationException: no se pudo inicializar de proxy - ninguna sesión"

@OneToMany(cascade = CascadeType.ALL, mappedBy = "logins", fetch=FetchType.LAZY,targetEntity=Invoice.class) 
public List<Invoice> getInvoiceList() { 
    return invoiceList; 
} 

public void setInvoiceList(List<Invoice> invoiceList) { 
    this.invoiceList = invoiceList; 
} 

Entonces me cambiaron a buscar = FetchType.EAGER, funcionó bien ..... Me pregunto qué pasará si no declaro FetchType, ¿Hibernate determina qué método usar? ¿O está incumplido por EAGER?

@OneToMany(cascade = CascadeType.ALL, mappedBy = "logins", fetch=FetchType.EAGER,targetEntity=Invoice.class) 
public List<Invoice> getInvoiceList() { 
    return invoiceList; 
} 

public void setInvoiceList(List<Invoice> invoiceList) { 
    this.invoiceList = invoiceList; 
} 

GRACIAS !!!!!!!!!

Respuesta

6

I am wondering what happens if I don't declare FetchType , does Hibernate determine itself which method to use? Or is it defaulted by EAGER??

En realidad, este comportamiento no es específico, pero Hibernate definido por la especificación JPA y que iba a encontrar la respuesta en la especificación o en el javadoc de la OneToMany anotación o las fuentes. A partir de las fuentes:

/** (Optional) Whether the association should be 
* lazily loaded or must be eagerly fetched. The 
* {@link FetchType#EAGER EAGER} strategy is a 
* requirement on the persistenceprovider runtime 
* that the associatedentities must be eagerly fetched. 
* The {@link FetchType#LAZY LAZY} strategy is a hint 
* to the persistence provider runtime. 
*/ 
FetchType fetch() default LAZY; 

Dicho esto, si bien hay casos de uso muy legítimas para FetchType.EAGER, utilizando EAGER sólo para evitar la LazyInitializationException (que se produce cuando se intenta cargar una asociación de descanso en un objeto individual) es más un trabajo más que una solución real.

67

De la especificación JPA 2.0, los valores predeterminados son así:

  • OneToMany: LAZY
  • ManyToOne: EAGER
  • ManyToMany: LAZY
  • OneToOne: EAGER
  • Columnas: EAGER
+0

¿Estás seguro de eso? – hevi

+5

En la documentación de persistencia de JPA: https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html Cada una de esas anotaciones especifica el valor predeterminado. La tabla anterior coincide con lo que está en la documentación. – CoreyOConnor

+0

¡Me salvaste un dolor de cabeza hoy ^! – Mechkov

Cuestiones relacionadas