Recherche…


Introduction

La récupération est vraiment importante dans JPA (Java Persistence API). Dans JPA, HQL (Hibernate Query Language) et JPQL (Java Persistence Query Language) sont utilisés pour récupérer les entités en fonction de leurs relations. Bien qu'il soit bien préférable d'utiliser autant de requêtes et de sous-requêtes de jointure pour obtenir ce que nous voulons en utilisant le SQL natif, la stratégie de récupération des entités associées dans JPA affecte essentiellement les performances de notre application.

Il est recommandé d'utiliser FetchType.LAZY. Joignez les colonnes quand elles sont nécessaires.

Vous trouverez ci-dessous une classe d'entité Employeur qui est associée à l'employeur de la table. Comme vous pouvez le voir, j'ai utilisé fetch = FetchType.LAZY au lieu de fetch = FetchType.EAGER. La raison pour laquelle j'utilise LAZY est que l'employeur peut avoir beaucoup de propriétés plus tard et à chaque fois que je n'ai pas besoin de connaître tous les domaines d'un employeur, le chargement de toutes ces tâches entraînera une mauvaise performance.

@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;  
        }  
    }  

Cependant, pour les associations récupérées par LAZY, les proxys non initialisés conduisent parfois à LazyInitializationException. Dans ce cas, nous pouvons simplement utiliser JOIN FETCH dans HQL / JPQL pour éviter une exception 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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow