hibernate
Recogiendo en hibernación
Buscar..
Introducción
La captura es realmente importante en JPA (Java Persistence API). En JPA, HQL (Hibernate Query Language) y JPQL (Java Persistence Query Language) se usan para obtener las entidades en función de sus relaciones. Aunque es mucho mejor que usar tantas consultas de unión y subconsultas para obtener lo que queremos mediante el uso de SQL nativo, la estrategia de cómo obtenemos las entidades asociadas en JPA sigue afectando esencialmente el rendimiento de nuestra aplicación.
Se recomienda utilizar FetchType.LAZY. Únete a buscar las columnas cuando sean necesarias.
A continuación se muestra una clase de entidad de empleador que se asigna a la tabla de empleadores. Como puede ver, utilicé fetch = FetchType.LAZY en lugar de fetch = FetchType.EAGER. La razón por la que estoy usando LAZY es porque el Empleador puede tener muchas propiedades más adelante y cada vez no necesito saber todos los campos de un Empleador, por lo que cargarlos todos llevará un mal desempeño, entonces el empleador está cargado.
@Entity
@Table(name = "employer")
public class Employer
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String Name;
@OneToMany(mappedBy = "employer", fetch = FetchType.LAZY,
cascade = { CascadeType.ALL }, orphanRemoval = true)
private List<Employee> employees;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
Sin embargo, para las asociaciones recuperadas LAZY, los proxies no inicializados a veces llevan a LazyInitializationException. En este caso, simplemente podemos usar JOIN FETCH en el HQL / JPQL para evitar LazyInitializationException.
SELECT Employer employer FROM Employer
LEFT JOIN FETCH employer.name
LEFT JOIN FETCH employer.employee employee
LEFT JOIN FETCH employee.name
LEFT JOIN FETCH employer.address