Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 외부설정
- webjar
- 스프링 부트
- 백기선
- @ConfigurationProperties
- rest api
- 백트래킹
- Application Runner
- OAuth2
- 리소스 서버
- application.properties
- 정적 리소스
- 다익스트라
- 브루트포스
- 리소스핸들러
- AuthenticationPrincipal
- 백준
- @Profile
- JPA
- WebApplication Type
- 알고리즘
- Spring Security
- Application Argument
- EnableAutoConfiguration
- cors
- JsonSerializer
- HttpMessageConverters
- Application Event
- HATEOAS
- 스프링부트
Archives
- Today
- Total
아카이브
[스프링 데이터 JPA] 스프링 데이터 JPA 6. Update 쿼리 본문
쿼리 생성하기
- find...
- count...
- delete...
- 흠.. update는 어떻게 하지?
Update 또는 Delete 쿼리 직접 정의하기
- @Modifying @Query (추천하지 않습니다)
@Modifying(clearAutomatically = true, flushAutomatically = true)
// flush -> update query -> PersistentContext를 clear -> DB에서 가져온다(context를 비워줘서 캐시에 없으니까)
@Query("UPDATE Post p Set p.title = ?1 WHERE p.id = ?2")
int updateTitle(String hibernate, Long id);
테스트 코드
/**
* 한 @Transactional 내에서는 Persistent 캐시가 유지된다
*/
@Test
@DisplayName("update title")
public void updateTitle() {
Post post = savePost(); // persistent 상태 (1차 캐시)
String changeTitle = "hibernate";
int update = postRepository.updateTitle(changeTitle, post.getId()); // DB에 update query가 발생했지만
assertThat(update).isEqualTo(1);
Optional<Post> byId = postRepository.findById(post.getId()); // post가 아직 1차 캐시 중이라 DB에 가지않고, 캐싱하고 있던 것을 참조한
assertThat(byId.get().getTitle()).isEqualTo(changeTitle);
}
@Test
@DisplayName("update title")
public void recommendUpdateTitle() {
Post spring = savePost();
spring.setTitle("hibernate");
// 명시적으로 update를 호출하진 않았지만
// find하기 전에 DB Sync를 해야하는 것을 hibernate가 알기에
// find 전에 변경해주면 DB에 Sync를 미리 맞춘 후 select 한다
List<Post> all = postRepository.findAll();
assertThat(all.get(0).getTitle()).isEqualTo("hibernate");
}
'Spring > 스프링 데이터 JPA' 카테고리의 다른 글
[스프링 데이터 JPA] 스프링 데이터 JPA 8. Projection (0) | 2021.01.17 |
---|---|
[스프링 데이터 JPA] 스프링 데이터 JPA 7. EntityGraph (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 JPA 5. 쿼리 메서드 Named Parameter과 SpEL (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 JPA 3. 쿼리 메서드 (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 JPA 3. 쿼리 메서드 (0) | 2021.01.16 |