hibernate
최대 절전 모드로 가져 오는 중
수색…
소개
JPA (Java Persistence API)에서는 가져 오기가 정말로 중요합니다. JPA에서 HQL (Hibernate Query Language) 및 JPQL (Java Persistence Query Language)은 관계에 따라 엔티티를 가져 오는 데 사용됩니다. JPA에서 관련 엔티티를 가져 오는 전략은 본질적으로 응용 프로그램의 성능에 영향을 미치고 있습니다. 네이티브 SQL을 사용하여 원하는 것을 얻으려면 너무 많은 가입 쿼리와 하위 쿼리를 사용하는 것보다 낫지 만.
FetchType.LAZY를 사용하는 것이 좋습니다. 필요에 따라 열을 가져옵니다.
아래는 Employer 엔티티 클래스로,이 테이블은 고용주 테이블에 매핑됩니다. 보시다시피 나는 fetch = FetchType.EAGER 대신 fetch = FetchType.LAZY를 사용했습니다. 제가 LAZY를 사용하는 이유는 고용주가 나중에 많은 자산을 보유 할 수 있고 고용주의 모든 분야를 알 필요가 없을 때마다 모든 것을 적재하면 고용주가 실망하게 될 것이기 때문입니다.
@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;
}
}
그러나 LAZY 가져온 연결의 경우 초기화되지 않은 프록시가 LazyInitializationException으로 연결되는 경우가 있습니다. 이 경우 HQL / JPQL에서 JOIN FETCH를 사용하여 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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow