2022 02 21
2022-02-21¶
Lombok Builder¶
- 참고: https://projectlombok.org/features/Builder
- 참고: https://www.baeldung.com/lombok-builder
- 참고: https://cheese10yun.github.io/lombok/
@Builder- 클래스 혹은 생성자에 붙일 수 있음
- 다음 7가지를 내부적으로 생성한다고 보면 됨
FooBuilder라는 inner static class "Builder"를 생성- "Builder" 안에 non-static, non-final 필드를 만듦
- "Builder" 안에 no-args 생성자 만듦
- "Builder" 안에 setter와 비슷한 Builder 체인을 제공
- "Builder" 안의 build() 메서드는 객체 생성
- "Builder" 안에 toString() 구현 되어있음
- .builder() 를 호출하여 빌더 패턴 사용 시작
- 클래스에 빌더 쓰기
- 롬복 팁
@Data쓰지 않기@ToString,@EqualsAndHashCode,@Getter,@Setter,@RequiredArgsConstructor를 한번에 사용하는 어노테이션
@Setter는 객체 안정성을 해침@ToString은 양방향 연관관계시 순환참조 발생@NoArgsConstructor의 접근 권한을 최소화 할 것@NoArgsConstructor(access = AccessLevel.PROTECTED)@Builder사용시 매개변수
Entity 부모가 둘인 경우¶
- 참고: https://velog.io/@woodyn1002/%EC%82%BD%EC%A7%88-%EB%A1%9C%EA%B7%B8-Hibernate%EC%97%90%EC%84%9C-%EB%B6%80%EB%AA%A8%EA%B0%80-%EB%91%98%EC%9D%B8-Entity%EC%9D%98-%ED%95%9C%EC%AA%BD-%EB%B6%80%EB%AA%A8%EB%A5%BC-%EC%A7%80%EC%9A%B0%EB%A9%B4-%EC%B0%B8%EC%A1%B0-%EB%AC%B4%EA%B2%B0%EC%84%B1-%EC%98%A4%EB%A5%98%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-%EB%AC%B8%EC%A0%9C
- Cascade.ALL이나 Cascade.PERSIST
- Partnership은 VentureCapital(Cascade.ALL) 과 Project(Cascade.REMOVE) 를 둘 다 부모로 가짐
- Project를 지우면 Partnership은 지워지며 Removed 상태가 전이됨
- flush 시 영속성 컨텍스트의 모든 엔티티들이 각각 Cascade.PERSIST 관계 맺고있는 Entity에게 영속성 전이 수행됨
- VentureCapital은 Cascade.ALL 이기에, Partnership은 Persistent 상태가 됨
- 즉, Partnership은 Persistent -> Removed -> Persistent
- Project는 여전히 Removed 상태 : 쿼리나감
- DB 상의 Partnership 테이블은 각각 venture_capital_id 와 project_id 를 가지고 있다
- Partnership은 여전히 project_id를 참조하고 있기에, 참조 무결성 오류 발생