값타입 컬렉션 쓰는것 대신
값타입 컬렉션 쓰면 추적하기가 어렵다 값타입 컬렉션 대신 OneToMany로 하나 테이블을 만들어서 사용해도 된다. 추적할 필요도 없는 저어어어어엉말 간단한 거라면 값타입을 써도 된다.
값타입 컬렉션 쓰면 추적하기가 어렵다 값타입 컬렉션 대신 OneToMany로 하나 테이블을 만들어서 사용해도 된다. 추적할 필요도 없는 저어어어어엉말 간단한 거라면 값타입을 써도 된다.
지연로딩으로 해놓을 경우 연관관계를 맺고 있는 것을 직접적으로 조회하지 않는한은 프록시로 대체한다. @Getter class Member { @Id @GeneratedValue Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") Team team; } 이렇게 있다고 치자 이 때 Member member = em.find(Member.class, 1L) member.getId(); 를 했을 경우 Team은 프록시로 대체한다. member.getTeam(); 과 같이 직접적으로 접근했을 때는 진짜 객체를 조회한다. 즉시로딩은 이와 반대다 간접적으로 했든 직접적으로 했든그냥 전부 쫘악 끌고온다. 그냥 지연로딩 사용하자 잘못사용하면..
JPA에서 상속맵핑에서 Join전략을 사용하는 상위나 MappedSuperClass를 사용할 때 그 클래스를 직접적으로 생성하지 못하게 추상클래스(abstract)로 만들어 주자
순수 객체 상태를 고려해서 항상 양쪽에 값을 설정하자. 연관관계 편의 메소드를 생성하자 양방향 매핑시에 무한 루프를 조심하자 예 : toString(), lombok, JSON생성 라이브러리(에서 json으로 반환할 때 무한루프가 생겨버림)
@Entity class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; @ManyToOne @JoinColumn(name = "MEMBERS") //
Entity 주의사항 파라미터 없는 기본생성자 필수 (public ,protected) final 클래스, enum, interface, inner 클래스 사용 x 저장할 필드에 final 사용X