Ricerca…


introduzione

Il recupero è molto importante in JPA (Java Persistence API). In JPA, HQL (Hibernate Query Language) e JPQL (Java Persistence Query Language) vengono utilizzati per recuperare le entità in base alle loro relazioni. Anche se è molto meglio che utilizzare così tante query e sottocomponenti per ottenere ciò che vogliamo usando l'SQL nativo, la strategia con cui recuperiamo le entità associate in JPA sta comunque essenzialmente influenzando le prestazioni della nostra applicazione.

Si consiglia di utilizzare FetchType.LAZY. Unisciti a recuperare le colonne quando sono necessarie.

Di seguito è riportata una classe di entità Employer che viene associata al datore di lavoro della tabella. Come puoi vedere ho usato fetch = FetchType.LAZY invece di fetch = FetchType.EAGER. La ragione per cui sto usando LAZY è perché il datore di lavoro può avere molte proprietà in seguito e ogni volta che potrei non aver bisogno di conoscere tutti i campi di un datore di lavoro, così caricandoli tutti porterà a una cattiva prestazione allora un datore di lavoro è caricato.

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

Tuttavia, per le associazioni recuperate LAZY, i proxy non inizializzati a volte portano a LazyInitializationException. In questo caso, possiamo semplicemente utilizzare JOIN FETCH in HQL / JPQL per evitare 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow