콘텐츠로 건너뛰기

JPA

H2 DB Not Null 컬럼에 Null을 insert하면 발생하는 일

일단 아무런 문제가 없는 간단한 Entity와 Repository를 만들고, application.yml에 h2 DB에 대한 정보를 적어둔다.

그런 후에 아래 테스트를 실행시켜보자.

테스트가 성공하고, 결과값이 나온다. column은 not null로 선언되어 있었다. 그런데 null로 insert가 성공한 것이다.

없는 것이… 더 보기 »H2 DB Not Null 컬럼에 Null을 insert하면 발생하는 일

java.sql.SQLException: Unknown system variable ‘performance_schema’

오류를 고쳤으면 공유하는 것이 미덕이라 생각되어 적어둠 SpringBoot 2.1.8로 올렸더니 mysql connector에서 오류가 발생하여 고생했는데, implementation(“mysql:mysql-connector-java:8.0.15”) 라고 버전을 명시하니 오류가 사라짐. 현재 최신 버전은 8.0.16인데, 호환성에 문제가 있는 듯. 아래 링크를 보면 MySQL쪽에서 호환성 처리를 해줘야만 된다고 한다. ref. https://stackoverflow.com/questions/56893867/error-connecting-to-memsql-with-mysql-j-connector

EntityUtil.java 구현체

Java에서 Jpa를 쓰다보면, 항상 select를 선으로 진행하게 되는 경우가 많다. 예를 들어, name과 age를 입력했는데, name이 unique하다면, DB에서 name으로 select를 해보고, 있으면 setAge()를 통해서 update를 진행해야 하고, 없으면 해당 Entity를 새로 생성해서 insert를 해야한다. 그래서 아래와 같은 로직을 사용하는 경우가… 더 보기 »EntityUtil.java 구현체

JPA Page 쿼리는 Immutable List를 반환한다

이번에 맡은 업무에서 Spring Batch를 중점적으로 사용하고 있는데, 기존 로직을 리팩토링하면서 겪게 된 이슈를 기록해본다. 먼저 기존 로직은 아래와 같다. (코드 스니핏이고, 일부 업무와 관계된 네이밍은 모두 dummy로 치환하였다) 결국 배치로직에서 bulk로 읽어온 것을 하나씩 read/process/write 구조로 처리하고, 해당 내용이… 더 보기 »JPA Page 쿼리는 Immutable List를 반환한다

JPA에서 count()는 Long Type을 return 함

통계에서 사용하는 쿼리를 만들다보니, (약간은) 부득이 하게 JPA Query Method를 사용하지 않고 @Query annotation을 이용해서 아래처럼 구현하였다.

호출하는 쪽의 로직은 아래와 같다.

자세한 로직은 회사 업무상 대외비이기 때문에 약간 이상한 네이밍인 점은 신경쓰지 않기로 하자. 어쨌거나 위의 로직을… 더 보기 »JPA에서 count()는 Long Type을 return 함

JPA datetime 오류

JPA에서는 persistence context 라는 개념이 있어서, 사실상 DB와 Application 사이에 하나의 proxy가 더 존재한다. 캐시나 관리 등의 측면에서 장점도 분명이 있지만, mybatis와 같이 direct로 데이터를 주고 받을 때와 다르게 data의 sync가 맞지 않으면 곤란한 경우가 발생한다. 그 중에 하나가 datetime… 더 보기 »JPA datetime 오류