-
20241101 53일차카테고리 없음 2024. 11. 1. 17:50
현업에서는 즉시로딩보다는 지연로딩을 주로 씀
이론상으로는 즉시로딩을 권장하지만 실무에서는 지연로딩을 씀
실습
Department.java
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id") private Company company;
Employee.java
@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "dept_id") private Department department;
DB
employee 테이블 department 테이블 company 테이블 package jpajava; import domain.Company; import domain.Department; import domain.Employee; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; public class Emp_Dept_Company_Test { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpatest"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); System.out.println("Transaction START!"); try { // Company company = new Company(); // company.setName("KOSTA"); // em.persist(company); // System.out.println("company 생성"); // // Department dept = new Department(); // dept.setDeptName("Sales"); // 비영속 상태 // dept.setCompany(company); // em.persist(dept); // 영속 상태, 즉시 쓰기 // System.out.println("dept 생성"); Employee employee = em.find(Employee.class, "202403"); System.out.println("employee.getEmpName() = " + employee.getEmpName()); System.out.println("employee.getDepartment().getClass() = " + employee.getDepartment().getClass()); System.out.println("--------------- id 출력 전 --------------- "); System.out.println("employee.getDepartment().getDeptId() = " + employee.getDepartment().getDeptId()); System.out.println("--------------- deptName 출력 전 --------------- "); System.out.println("employee.getDepartment().getDeptName() = " + employee.getDepartment().getDeptName()); System.out.println("employee.getDepartment().getClass() = " + employee.getDepartment().getClass()); System.out.println("employee.getDepartment().getDeptId() = " + employee.getDepartment().getDeptId()); System.out.println("commit 전"); tx.commit(); System.out.println("commit 후"); } catch (Exception e) { tx.rollback(); System.out.println(); System.out.println("[Error] : " + e.getMessage()); } finally { System.out.println("Transaction COMPLETED!"); } } }
- proxy
즉시로딩과 N+1 쿼리 문제
JPQL Fetch Join - 중요!!!!!!