엔티티 사용할 땐..

타마타마·2022년 7월 23일
0

JPA

목록 보기
5/10
post-thumbnail

어느정도 JPA 기본에 대하여 공부를 했다 ..
아직 갈 길은 멀었지만 포기하지 않고 끝까지 공부한게 뿌듯하다

지금까지 공부한 내용으로
JPA 엔티티를 사용할 때 주의할 점을 정리해보자 한다.

Setter 사용 가급적 금지

  • 프로젝트의 프로세스가 돌아가면서 변경 포인트가 많아져, 유지보수가 힘들어 질 수 있다.

지연로딩을 사용할 것 !

지금까지 공부한 것 중에 손에 꼽을 정도로 중요한 것 같다.
JPA에는 즉시로딩과 지연로딩이 있다.
간략하게 설명하자면
- 즉시로딩 : 데이터를 조회할 때 관련 있는 데이터를 모두 조회
- 지연로딩 : 실제로 해당 데이터를 사용할 때 조회

실무에서는 프로젝트의 규모가 크다보니 즉시로딩으로 구현하게 될 경우 성능이슈가 크게 발생할 것이다. 따라서 지연로딩을 사용하도록 하자

@_ToOne 어노테이션은 기본이 즉시로딩( FetchType.EAGER ) 로 되어 있다.
(ex: @OneToOne, @ManyToOne)
해당 부분을 무조건 LAZY로 변경하여 사용하자

연관관계 메서드(양방향)

DB 로직상 연관관계의 주인에서 등록해준다.

  • 여기서 연관관계의 주인(Owner)란?
    sql은 FK를 통하여 매핑 작업을 해준다. 그러나 JAVA는 FK라는 개념이 없기 때문에 따로 매핑작업을 해주어야 한다.
    예를 들어 Member와 Order가 있는 경우

    이 때 FK가 있는 곳을 연관관계 주인으로 설정한다.
    동시에 N인 관계를 가지는 쪽이 연관관계의 주인이 된다.
    만약 Member가 주인이 된다면 Member의 값을 수정했을 때 Order쪽의 데이터가 변경될 수 있기 때문이다.
  • DB에서 저장/수정은 Order만 하면 되지만, 로직 상에서 Member에서도 Order의 데이터를 사용하고, Order에서 Member의 데이터를 사용할 수 있기 때문에 편의 메서드를 따로 만들어서 사용해주자.

      //Member.java  
    @OneToMany(mappedBy="member")
     private List<Order> orders = new ArrayList<>();
    
    //====================================================
    
    //Order.java  
    	``` java
    @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name="member_id") //FK이름 >> member_id가 됨.
     private Member member;//FK
     
     //(실행코드)
     
     //==연관관계 메서드==
     public void setMember(Member member){
         this.member = member;
         member.getOrders().add(this);
     }
    	```
    	

JPA에서 편리성을 위하여 제공해주지만, 엔티티 설정 시 유의할 것이 많은 것 같다.
주의해서 사용하도록 하자.

0개의 댓글