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
- fractional seconds
- getEntityGraph
- 오블완
- MSSQL
- mysql =
- getDateCellValue
- spring boot
- 1*1000
- 운동해서 광명찾자
- AuditingEntityListener
- Protecle
- EmbeddedId
- sendFractionalSeconds
- 버전 문자열 비교
- @CreateDate
- +9:00
- mysql not equal null
- createEntityGraph
- https
- load order
- RootGraph
- mysql equal null
- NamedEntityGraph
- 티스토리챌린지
- MYSQL
- yml
- deserializer
- apatch poi
- @EntityListeners
- pooled-lo
Archives
- Today
- Total
Hello
Spring Data JPA @Modifying 본문
728x90
Spring Data JPA @Query를 사용해 write 쿼리 작성하는 방법을 정리합니다.
짧게 이야기하면 @Query 사용해 write 쿼리를 작성 할 때 @Modifing 어노테이션이 필요합니다.
@Modifying docs를 보면 @Query 어노테이션을 사용해 정의된 메서드 쿼리에서 INSERT, UPDATE, DELETE, DDL 작성 시 필요하다고 설명되어 있습니다.
아래처럼 delete 쿼리 작성 후 호출 하게 되면 '해당 쿼리는 DML 작업을 지원되지 않는 에러가 발생합니다.
@Query("delete from Test1 t where t.test3 is not null")
void deleteByTest3IsNotNull();
ERROR
JAVA 8
org.hibernate.hql.internal.QueryExecutionRequestException: Not supported for DML operations [delete from com.example.demo.Test1 t where t.test3 is not null]
JAVA 17
org.hibernate.query.IllegalSelectQueryException: Expecting a SELECT Query [org.hibernate.query.sqm.tree.select.SqmSelectStatement], but found org.hibernate.query.sqm.tree.delete.SqmDeleteStatement [delete from Test1 t where t.test3 is NOT null]
@Modifying 어노테이션을 붙여주면 정상적으로 호출하는 것을 확인할 수 있습니다.
@Modifying
@Query("delete from Test1 t where t.test3 is not null")
void deleteByTest3IsNotNull();
@Query를 사용하여 삭제 쿼리를 실행하는 것은 Spring Data JPA의 deleteBy 쿼리 메서드와 다르게 작동한다는 점에 유의해야 합니다.
- @Query : 데이터베이스에 단일 쿼리가 실행됩니다.
- deleteBy 쿼리 메서드 : 데이터베이스에서 엔터티를 가져온 다음 하나씩 삭제합니다.
이는 수명 주기 메서드 @PreRemove가 해당 엔터티에서 호출된다는 의미입니다.
@Modifying 옵션
- flushAutomatically(boolean) : 쿼리를 실행하기 전 컨텍스트에 있는 쿼리 플러시 여부에 대한 옵션
- clearAutomatically(boolean) : 쿼리를 실행한 후 컨텍스트 클리어 여부에 대한 옵션
https://www.baeldung.com/spring-data-jpa-query
https://www.baeldung.com/spring-data-jpa-modifying-annotation
728x90
'spring' 카테고리의 다른 글
[Spring] RequestParam Enum으로 매핑 (0) | 2024.04.18 |
---|---|
[spring] 같은 bean에서 Propagation.REQUIRES_NEW 동작하지 않음 (0) | 2024.01.29 |
Jooq(db scan, flyway)로 DB 사용해보기 (0) | 2023.11.17 |
[Spring Boot] Redis Pub/Sub 사용 (0) | 2023.11.09 |
여러 profile을 하나의 YAML으로 작성해 사용 (0) | 2023.09.19 |