hibernate
Hibernate ophalen
Zoeken…
Invoering
Ophalen is erg belangrijk in JPA (Java Persistence API). In JPA worden HQL (Hibernate Query Language) en JPQL (Java Persistence Query Language) gebruikt om de entiteiten op te halen op basis van hun relaties. Hoewel het veel beter is dan het gebruik van zoveel deelnemende query's en subquery's om te krijgen wat we willen met behulp van native SQL, heeft de strategie hoe we de bijbehorende entiteiten in JPA ophalen nog steeds in wezen invloed op de prestaties van onze applicatie.
Het wordt aanbevolen om FetchType.LAZY te gebruiken. Doe mee om de kolommen op te halen wanneer ze nodig zijn.
Hieronder staat een werkgeversentiteitsklasse die is toegewezen aan de tabelwerkgever. Zoals je kunt zien, heb ik fetch = FetchType.LAZY gebruikt in plaats van fetch = FetchType.EAGER. De reden dat ik LAZY gebruik, is omdat de werkgever later veel eigenschappen heeft en elke keer dat ik niet alle velden van een werkgever hoef te kennen, dus als ze allemaal worden geladen, leidt dit tot een slechte prestatie, dan wordt een werkgever geladen.
@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;
}
}
Voor LAZY opgehaalde associaties leiden niet-geïnitialiseerde proxy's soms tot LazyInitializationException. In dit geval kunnen we JOIN FETCH eenvoudig gebruiken in de HQL / JPQL om LazyInitializationException te voorkomen.
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