본문 바로가기

JPA

(3)
JPA: @DataJpaTest 에서 트랜잭션 Rollback 이 안된 이유는? 어떤 기능의 변경에 대한 요청을 받았다. 마침 이전에 존재했던 기능에 테스트 코드가 없었다. 테스트 코드를 먼저 만들었다. 왜냐하면 변경 이후에 잘 동작하는지 안전망이 필요했기 때문이다. Unique index violation 이 발생 IntelliJ IDEA에서 테스트 묶음(Test Suites) 들을 돌릴 때는 문제가 없었다. 그런데 이상하게 로컬 환경에서 터미널에서 mvnw clean test 명령을 돌리면 테스트 하나가 깨진다. 원인을 찾아보니 DataIntegrityViolationException 가 발생했고, 세부적으로는 Unique index violation 이 발생했다. org.springframework.dao.DataIntegrityViolationException: could n..
[JPA] @Converter 는 어떻게 동작할까? 지니님이 기본 데이터 타입과 String 등을 enum 으로 바꾸는 작업을 진행하셨다. 대부분은 아래와 같이 @Enumerated 으로 enum의 이름을 사용하도록 작업을 했다. import lombok.Getter; import lombok.Setter; import javax.persistence.*; @Entity @Table(name = "TEST") @Getter @Setter public class TestEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "SEQ") private Integer id; @Column(name = "ACTION_TYPE", length = 100) @Enumerated(..
[Spring JPA] 멀티컬럼 - 쿼리메소드 vs @Query 도비님이 코드리뷰 PR을 주셨다. 기존에 query method로만 사용을 했는데 @Query 를 사용하여 왜 그랬는지 궁금했다. 알고보니 특정 컬럼에 대하여 or 조건으로 결합이 되었던 것이 이유였다. 예를 들어 (t.a = 'abc' or t.a = 'bcd') and ... 같이 우선적으로 적용해야 하는 or가 있는 경우였다. 물론 결합법칙으로 (A OR B) AND C 를 A AND C OR B AND C 로 풀 수는 있지만 trade-off 비용이 더 안좋았을 거라 생각이든다. 다른 생각 하지만 JPA 객체지향이 아닌 쿼리지향으로 사용하고 있지 않는가 하는 생각을 하게 되었다. query method가 점점 길어지고 복잡해지고 있다면 쿼리지향을 하고 있는가 생각해 보는 점검의 시간(냄새)으로 생..