본문 바로가기

TIL

[TIL 2022-2-5] JPA 공부

양방향 연관관계에서는 연관관계의 주인

양방향 연관관계에서는 연관관계의 주인을 정해야한다. 일대다 관계에서는 다에 무조건 외래 키가 존재하게된다.

 

테이블, 컬럼명

테이블명과 컬럼명은 보통  대문자 + _   또는 소문자 + _ 을 사용한다.

 

@Embeddable, @Embedded

Entity에서 어떤 정보를 표현할 때, 연관되어있는 프로퍼티들을 클래스로 분리하여 관리할 수 있다. 분리한 클래스는 @Embeddable 어노테이션을 클래스 레벨에, Entity에는 @Embedded를 필드에 지정해주므로써 구현한다. 

Delibery에서 @Embedded를 통해 Address 속성들을 분리
DB에는 Address속성들이 컬럼으로 변환

 

@Entity 에 @Setter 대신에 비지니스 메소드를 만들어서 사용할 것

로직이 복잡해지고 세터를 통해 데이터를 변경하는 것을 여러 곳에서 하다보면 문제가 발생했을 때 추적이 매우 힘들어진다. 데이터의 수정이 필요한 곳이 있으면 거기에 맞는 메소드를 구현하여 사용하는게 좋다.

 

 

엔티티의 컬렉션은 필드에서 초기화

다른 필드들과 다르게 컬렉션만 초기화를 필드에서 해준다. NPE를 막을 뿐만 아니라 하이버네이트가 데이터가 변경될 때 감지할 수 있는 컬렉션으로 변경한다. 하지만 개발자가 임의로 초기화를 하게되면 하이버네이트가 관리하지 못하는 컬렉션이 되므로 정상 동작하지 않을 수 있다.

https://www.inflearn.com/questions/258175

 

필드에 있는 컬렉션을 초기화 시키는 이유가 뭔가요? - 인프런 | 질문 & 답변

List<Order> orders = new ArrayList<>(); 이렇게 컬렉션만 초기화 해주는 이유가 궁금합니다. 단순히 NPE 방지를 위해서인가요? 그렇다면 왜 래퍼 클래스는 초기화 하지 않나요? - 질문 & 답변 | 인프런...

www.inflearn.com