일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 바운디드 타입
- annotation processor
- Switch Expressions
- throwable
- docker
- 항해99
- 상속
- 로컬 클래스
- junit 5
- 제네릭 타입
- 자바할래
- yield
- System.out
- System.in
- auto.create.topics.enable
- 브릿지 메소드
- 스파르타코딩클럽
- raw 타입
- 익명 클래스
- 함수형 인터페이스
- 람다식
- 프리미티브 타입
- 접근지시자
- 자바스터디
- System.err
- Study Halle
- 정렬
- 합병 정렬
- github api
- 제네릭 와일드 카드
Archives
- Today
- Total
코딩하는 털보
21.11.07 TIL 본문
편의 메서드
User
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Habit> habit;
Habit
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
@JsonIgnore
private User user;
User와 Habit은 다대일 양방향 관계이며 관계의 주인은 Habit이다.
연관관계의 주인이 Habit이기 때문에 정상적인 외래키 관리는 Habit의 setUser() 메서드를 사용한다.
protected void setUser(User user) {
this.user = user;
}
동일한 트랜젝션 내 1차캐시에서 setUser를 사용한 persist 상태의 Habit을 통해서 User를 확인할 수 있다.
HabitWithCounter habit = (HabitWithCounter) Habit.createHabit(habitTypeDto.getHabitType(), createHabitRequestDto, user);
habitRepository.save(habit);
User owner = habit.getUser();
하지만 반대로 1차 캐시의 User의 habit에는 아직 새로 생성된 습관이 추가되지 않은 상태 일 것이다.
만약 user에서 다시 habit을 조회하는 로직이 필요하지 않거나 user를 DB에서 다시 조회한다면 문제는 없지만
그렇지 않다면 편의 메서드를 통해서 직접 집어 넣는 과정을 추가할 수 있다.
protected void setUser(User user) {
this.user = user;
user.getHabit().add(this);
}
이렇게 편의 메서드에 user의 List
Comments