berryberrybin / board-project

0 stars 0 forks source link

[JPA] JPA 프록시 개념 및 @NoargsConstructor의 Accesslevel 이해 #17

Open berryberrybin opened 1 year ago

berryberrybin commented 1 year ago
berryberrybin commented 1 year ago

예시 코드

@Getter
@Setter
@Entity
@NoArgsConstructor(access=AccessLevel.PROTECTED)
public class Food{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   @Column(name="food_id")
   private Long foodId;

   private String foodName;

   @ManyToONe(fetch=FetchType.LAZY)
   @JoinColumn(name="store_id)
   public Store store;
}
@Getter
@Setter
@Entity
@NoArgsConstructor(access=AccessLevel.PROTECTED)
public class Store{
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   @Column(name="store_id")
   private Long storeId;

   private String storeName;

}

정리

berryberrybin commented 1 year ago

Entity Class에 @NoArgsConstructor(access = AccessLevel.PRIVATE) 사용시 문제 발생하는 이유

Public 설정

berryberrybin commented 1 year ago

@ManyToOne(fetch = FetchType.EAGER) 사용

Proxy(프록시) 개념

JPA 프록시

관련 테스트 코드

@Test
    public void proxyTest(){

        FoodEntity foodEntity = em.find(FoodEntity.class,5L); // food_id 값이 5L인 데이터를 찾는다.
        System.out.println("======= 쿼리 전송 =======");

        System.out.println("Food ID : " +foodEntity.getFoodId());
        System.out.println("Food Name : " + foodEntity.getFoodName());
        System.out.println("Food Calorie : " + foodEntity.getFoodCalorie());
        System.out.println(foodEntity.getStoreEntity().getClass());

        System.out.println("======= 쿼리 결과 =======");

        System.out.println("///////////////////////////////");
        System.out.println("///////////////////////////////");

        System.out.println("======= Store 데이터 =======");
        System.out.println("Store ID : " + foodEntity.getStoreEntity().getStoreId());
        System.out.println("Store Name : " + foodEntity.getStoreEntity().getStoreName());
        System.out.println("Store Address : " + foodEntity.getStoreEntity().getAddress());
        System.out.println("Store Number : " + foodEntity.getStoreEntity().getStoreNumber());

        em.close();
    }

image

image

image

berryberrybin commented 1 year ago

https://erjuer.tistory.com/106 https://erjuer.tistory.com/105