반응형
어느 책에서나 어느 강의에서나 Entity에서는 Setter를 사용하는 것을 지양한다고 한다. 그렇다면 왜 setter를 지양할까 ? setter를 지양하는 이유 사용한 의도를 쉽게 파악하기 어렵다. Member member = new Member(); member.setUsername("김갑동"); member.setAge(50); 위 코드를 보면 member에 값을 설정하는 것은 알겠는데 이게 값을 생성하는 것인지, 값을 변경하는 것인이 의도를 파악하기 힘들다. 그리고 엔티티의 필드가 더 많을 수록 한눈에 파악하는 것이 힘들어진다. 일관성을 파괴한다. public Member updateMember(Long id) { Member member = findById(id); member.setUserna..
상속관계 매핑 - @Inheritance 관계형 DB는 상속 관계라는 개념이 없고, 슈퍼 타입, 서브 타입 관계라는 모델링 기법이 객체 상속과 유사하다. 그래서 JPA는 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑할 수 있는 상속 관계 매핑을 지원한다. JPA의 상속 관계 매핑은 총 3가지 방법이 존재한다. JOIN 전략 ( JOINED ) 단일 테이블 전략 ( SINGLE_TABLE ) 구현 클래스마다 테이블 전략 ( TABLE_PER_CLASS ) - 많은 단점이 존재해 추천 X 상속 관계 매핑에 사용되는 주요 어노테이션은 다음과 같다. @Inheritance(strategy=InheritanceType.??) 상속관계 매핑을 사용하는 주요 어노테이션으로 부모클래스에 해당 어노테이션을 붙..
@ManyToOne - 다대일 ( N : 1) 연관관계 매핑 시 가장 많이 사용하는 매핑 방법이다. 다대일은 외래키(FK)를 갖고 있는 "다"쪽이 연관관계의 주인이 된다. 단방향 매핑 @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... } @Entity public class Team { @Id @GeneratedValue @Column(name = "TEAM_ID") private Long id; private String nam..
이번 포스팅에서 JPA의 연관관계 매핑의 주인이란 무엇인지? 또 연관관계 매핑의 주인이 왜 필요한지에 대해 알아보려한다. 연관관계 주인이 필요한 이유에 대해 먼저 말하자면, 객치 지향의 패러다임과 데이터베이스의 패러다임에 차이가 있기 때문이다. 먼저 각 패러다임의 차이를 이해할 수 있도록 양방향과 단방향 매핑에 대해 설명하고자 한다. 양방향과 단방향 매핑 양방향 : 두 객체 모두가 각각 참조용 필드를 갖고 참조 단방향 : 두 객체 사이에 하나의 객체만 참조용 필드를 갖고 참조 데이터베이스에서 양방향과 단방향 데이터베이스에는 양방향과 단방향이라는 개념이 없다. 외래키(FK) 하나면 양쪽의 연관관계를 알 수 있다. (양방향 관계의 특성을 갖는다.) 데이터 베이스 테이블은 외래키(FK) 하나로 양쪽 테이블을 ..
기본키(primary key) 매핑하는 방법은 총 2가지로 직접 할당과 자동 생성이 있다. 직접 할당 : @Id 어노테이션만 사용하여 Id값을 직접할당 자동 생성 : @Id와 @GeneratiedValue를 사용하여 원하는 키 생성 전략을 선택 자동 생성의 키 생성 전략은 다음과 같이 4가지로 분류 된다. 키 생성 전략 IDENTITY : 데이터베이스에 위임 (MYSQL) SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용 (ORACLE) TABLE : 키 생성용 테이블 사용 (모든 DB에서 사용) AUTO : dialect(방언) 설정에 따라 자동 지정 (기본값) 이 각 키 생성 전략에 대해 자세히 알아보자. IDENTITY 전략 기본 키 생성을 데이터베이스에 위임하는 전략 (주로 MySQL, Pos..