Notice
Recent Posts
Recent Comments
Link
개발일지
JPA Relation 속성 본문
CascadeType
PERSIST
지정한 Entity에 영속성을 부여한다.
엔티티 A, B가 있다. A 엔티티에 B 엔티티의 관계를 설정(
OneToOne, OneToMany
등)한다.cascade = CascadeType.PERSIST
의 속성을 부여하면 A 엔티티에 B 엔티티를 등록하면 자동으로 B 엔티티를 등록한다. 따로 B 엔티티를 등록할 필요가 없다.// 1. 속성 부여 전 A a = new A(); a.setB(bRepository.save(new B())); // B를 따로 등록한 후에 A에 등록한다. aRepository.save(a); // 2. 속성 부여 후 A a = new A(); a.setB(new B()); // new B로 바로 등록하면 자동으로 B가 등록된다. aRepository.save(a);
MERGE
지정한 Entity에 상태를 병합시킨다.
List<A> result = aRepository.findAll(); A a = result.get(3); a.getB().setData("new Data"); // MERGE를 하면 관계되어 있는 B엔티티에 값이 들어간다. MERGE를 하지 않을 경우 값이 들어가지 않는다. aRepository.save(a); aRepository.findAll().forEach(System.out::println);
REMOVE
지정한 Entity도 값이 삭제된다.
aRepository.delete(a); aRepository.findAll().forEach(System.out::println); bRepository.findAll().forEach(System.out::println); // 1. REMOVE 지정 전 // A만 삭제된다. // 2. REMOVE 지정 후 // A, B 가 같이 삭제된다.
FetchType
default
값은EAGER
이다.fetch = FetchType.EAGER
- 한방 쿼리로
select
한다.left outer join
으로select
한다.fetch = FetchType.LAZY
- 지정한 관계의 값이 호출될 때
select
한다.- 불필요한 쿼리 호출을 줄이는 데 도움이 된다.
optional
default
값은true
이다.false
일때 지정한 값은 항상 필요한 값이다.- 값이 없다면 에러가 발생한다.
inner join
으로 실행된다.orphanRemoval
orphanRemoval = true
속성을 추가한다.a.setB(null); aRepository.save(a); aRepository.findAll().forEach(System.out::println); bRepository.findAll().forEach(System.out::println); // 1. 설정 전 // A에서만 B값만 null이 되고 B의 값은 삭제되지 않는다. // 2. 설정 후 // A에서 B값이 null이 되고 B의 값도 삭제된다.
Comments