부모 Entity 조회
// OneToOne 관계의 경우 Lazy 로딩이 정상 동작하지 않는 경우가 많다.
// lazy 로딩이 정상동작하기 위해선 특정 조건을 충족해야한다.
// lazy 로딩 발생
jpaUserRepository.findAll()
.stream()
.map(user ->
// Model 데이터 매핑
User.builder()
.userId(user.getId())
.name(user.getName())
.build();
).forEach(user -> System.out.println(user.toString()));
// Lazy 로딩이 발생하지 않는다.(JPQL 사용)
em.createQuery(
"select new com.test.react.Model.User(u.id, u.name) from User u", User.class // Entity로 조회하여 Model에 결과 반환(Model에 해당 파라미터를 받는 생성자가 필요하다)
).getResultList()
.forEach(user -> System.out.println(user.toString()));
부모 데이터 수정
jpaUserRepository.findById(1L) // 회원 정보 조회
.ifPresent(user -> {
user.changeName("aaaaaa"); // 조회된 회원 정보 수정
});
jpaUserRepository.flush(); // 변경 내용 저장
자식 데이터 수정 또는 생성
jpaUserRepository.findById(4L) // 회원 정보 조회
.ifPresent(user ->{
if(user.getUserDetail() != null){ // UserDetail 테이블에 값이 있으면 연관된 데이터 수정
user.getUserDetail().changeAddress("address Change");
}else{ // UserDetail 테이블에 값이 없으면 신규 데이터 생성
// 부모 Entity에 cascade 옵션이 없으면 save the transient instance before flushing 에러가 발생한다.
user.setUserDetail(UserDetail.builder()
.age(1000)
.address("testasdf")
.build());
}
});
jpaUserRepository.flush(); // 변경 내용 저장
'JPA > JPA' 카테고리의 다른 글
Auditing (0) | 2020.06.09 |
---|---|
컬렉션 조회(OneToMany) (0) | 2020.06.09 |
변경 감지와 병합(merge) (0) | 2020.06.09 |
JPA에서 사용하는 다양한 API (0) | 2020.06.09 |
JPA 의 데이터 타입 분류 (0) | 2020.06.09 |