일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Study Halle
- 정렬
- 스파르타코딩클럽
- Switch Expressions
- docker
- System.out
- junit 5
- throwable
- github api
- 로컬 클래스
- 항해99
- 함수형 인터페이스
- 제네릭 타입
- 접근지시자
- 합병 정렬
- yield
- 브릿지 메소드
- System.err
- 람다식
- 바운디드 타입
- 자바할래
- 익명 클래스
- System.in
- 상속
- 프리미티브 타입
- auto.create.topics.enable
- raw 타입
- 자바스터디
Archives
- Today
- Total
코딩하는 털보
21.11.05 TIL 본문
오늘의 삽질
JPQL Query
필요 SQL, 오늘이 duration 시작과 끝 사이에 있는지 확인해야함.
select * from habit
where user_id = 3
and practice_days like '%5%'
and duration_end >= '2021-11-05'
and duration_start <= '2021-11-05';
@Query("select h from HabitWithCounter h " +
"where h.user = :user " +
"and h.practiceDays like %:day% " +
"and h.durationStart <= :today " +
"and h.durationEnd >= :today")
List<Habit> findTodayHabitListByUser(User user, int day, LocalDate today);
[오류]org.hibernate.PersistentObjectException: detached entity passed to persist
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private User user;
Monster newMonster = Monster.createNewMonster(user, monsterName, monsterDatabase);
monsterRepository.save(newMonster);
user.updateMonster(newMonster);
CascadeType.ALL 상황에서 save할 때 user는 이미 있으므로 save 안됨.
Entity 설계가 잘못되어 있는것으로 판단하고 연관 관계의 주인을 User로 바꾸고 CascadeType을 제거.
[오류]TransientPropertyValueException: object references an unsaved transient instance
@Transactional
public User updateMonster(User user, Monster newMonster) {
user.updateMonster(newMonster);
return userRepository.save(user);
}
FK로 쓰는 객체가 아직 저장이 안 되서 오류
@OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private Monster monster;
CascadeType으로 save 할 때 user에 set된 객체까지 같이 저장하게 할 수 있다.
Comments