ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 - 중요!!!!!!

     

Designed by Tistory.