728x90
반응형
source 는 Github 에 있습니다.
@ElementCollection 정리
- JPA 는 ORM 이고 ORM 은 Object Releation Mapping 의 약자입니다.
- RDB 의 경우 데이터를 저장할 때, collection 단위로 저장할 수 있는 방법이 없습니다.
- 예를 들면, Member 라는 테이블에 phone_number 가 여러개 들어갈 수 없습니다.
- JPA 에서는 @ElementCollection 을 이용해서 Collection 대상인 것을 알려줄 수 있습니다.
source 및 로그
Member Entity
아래와 같이 Member Entity 에 roles collection 을 만들어주고 ElementCollection 을 선언해주면 Roles 테이블이 만들어집니다.
@Entity public class Member { @Id @GeneratedValue @Column(name = "member_id") @Setter private Long id; @Column @ElementCollection private List<String> roles = new ArrayList<>(); }
테이블 생성 Log
2022-01-04 17:51:41.800 DEBUG 2091 --- [ restartedMain] org.hibernate.SQL :
create table member (
member_id bigint not null,
age integer,
name varchar(255),
tel_no varchar(255),
primary key (member_id)
)
2022-01-04 17:51:41.800 DEBUG 2091 --- [ restartedMain] org.hibernate.SQL :
create table member_roles (
member_member_id bigint not null,
roles varchar(255)
)
@ElementCollection vs 연관관계 (OneToMany, ManyToMany)
@ElementCollection
- 부모 Entity 에 의해 관리됩니다.
- 무슨 말인가 하면 위에 member_roles 에 member_id 와 관련된 키가 생성된 것을 볼 수 있습니다.
- 부모와 함께 저장되고 삭제됩니다. casecade 옵션이 default 입니다.
- 컬렉션 값 변경 시, 전체 삭제 후 새로 추가합니다.
- member id 데이터 하나의 roles 가 변경되면 전체 삭제 후, 새로 추가합니다.
연관관계 (@OneToMany / @ManyToMany)
- 여러 Entity 와 연관관계를 맺을 수 있으며, 연관관계를 맺을 때, 보통 ID 를 사용합니다.
결론
- 위 특징을 잘알고 사용한다면 연관관계를 사용하지 않으므로 라인수가 줄어들며, 알아보기 쉬울 것입니다.
reference
'Spring > jpa' 카테고리의 다른 글
spring data jpa 에서 데이터 생성일, 수정일 자동 생성 (0) | 2021.12.29 |
---|---|
@DataJpaTest 정리 (0) | 2021.12.15 |
spring data jpa ID 생성전략에 따른 동작 방식 정리 (0) | 2021.06.22 |
spring data jpa batch insert 정리 (0) | 2021.05.20 |
spring data jpa save, saveAll 비교 (0) | 2021.05.15 |
댓글