728x90
JPA를 사용하면서 엔티티에서 @Setter 어노테이션을 모두 제거하게 되었다
엔티티 사용시에 setter 사용을 지양하도록 하라는 설명들을 보면서 왜 그런지에 대해서 많은 공부를 하게 된 것 같다.
그러면 데이터에 수정이 있어야할 경우에는 어떻게 해야할까?
전체를 다 들고와서 계속 올리는 건 너무 쓸데없는 코드가 되지 않을까
한참 고민을 하다가
내가 작업하고 있는 것은 수 많은 컬럼 중에 하나의 boolean 상태만 바꾸는 것이라 @Query 를 사용해보기로 했다.
그런데 바로 DML 오류ㅎ...
not supported for dml operations update
왜 INSERT, UPDATE, DELETE 문을 쿼리로 짰을 때 @Modifying @Transactional을 붙이라고 하는 걸까??
@Modifying
@Query 를 붙인 쿼리들은 영속성이 아닌 바로 데이터 베이스에 직접 접근하게 된다
JPA 메서드 네이밍으로 만들어진 쿼리가 아니라 직접적으로 접근을 하다보니 영속성 컨텍스트 관리 때문인 것으로 보인다
그리고 해당 @Modifying 을 사용할때 같이 사용할 수 있는 attribute 들이 있다
@Modifying(clearAutomaticallty = boolean) < 이는 연산 직 후 영속성 컨텍스트를 clear 해주겠느냐는 속성이다.
상황에 따라 적용하면 될 듯 하다.
@Transactional
이는 데이터를 수정하거나 삭제하는 도중에 문제가 됐을 때 롤백하도록 하는 어노테이션이다.
728x90
'Web > DB' 카테고리의 다른 글
[Hibernate validator] 6. Creating custom constraints (1) | 2023.02.02 |
---|---|
[Hibernate orm] 2.7. Associations (1) | 2023.02.02 |
[MAC MySql] db 세팅 부터 Spring 연동까지 (0) | 2023.01.04 |
[MySql Workbench Mac m1] 접속 순서 + 에러 정리(추가중) (0) | 2022.12.17 |
[MySql Mac M1] 기본 세팅 명령어 (0) | 2022.12.16 |