• JPA 와 mybatis 를 같은 Transaction 에서 사용하기

    이 포스트는 같은 트랜잭션 내에 JPA와 MyBatis를 사용하는 방법을 Spring Transaction 을 이용한 예제를 보여준다. JpaTransactionManager Spring 은 PlatformTransactionManager 인터페이스로 트랜잭션을 처리한다. 이 인터페이스의 구현체 중에 하나인 JpaTransactionManager 는 단일 JPA EntityManagerFactory 를 유지하면서 스레드별로 EntityManager를 제공한다. JpaTransactionManager 는 JPA 를 위해 주로 사용하지만 트랜젝션이 사용하고 있는 DataSource에 직접 접근이...


  • Windows에 Gradle 설치하기

    Windwos에 Gradle 설치 하기 포스트는 2020년 4월 5일 기준으로 업데이트 되었습니다. 요구사항 Gradle은 Java JDK 8 이상 설치되어 있다면 주요 OS에서 대부분 설치가 가능합니다. 자바 버전은 아래 명령어로 확인할 수 있습니다. 자바버전 확인 java -version Gradle은 Groovy Library를 포함하여 배포되기 때문에 특별히 따로 설치할 필요는 없습니다. 기존에 설치되어 있는 Groovy가...


  • enum으로 JPA 상속관계 구분 컬럼 지정

    클래스의 상속관계를 JPA로 표현하기위해서 @DiscriminatorColumn 애노테이션으로 부모 클래스의 구분 컬럼을 지정하고 @DiscriminatorValue 애노테이션으로 자식 클래스가 사용할 구분자 값을 지정한다. @DiscriminatorValue는 String 타입을 Value 로 지정하게 되어있다. 일반적으로 구분자 또는 타입 같은 값은, 값 리스트들을 체계적으로 관리하기위해 enum 으로 선언해 사용하고는 하는데 이것을 JPA에 바로 적용할 수가 없다. 이 포스트에서는 enum을...


  • The server time zone value 'KST' is unrecognized 예외 발생시

    IntelliJ에서 로컬에서 동작하고 있는 mysql 에 직접 접속하려고 하다보니 The server time zone value 'KST' is unrecognized or represents more than one time zone. 오류가 발생하였다. 개발할 때에는 Datasource의 url에 ?serverTimeZone=Asia/Seoul 를 추가하면 대부분 해결이 된다. IntelliJ에서는 DB 접속정보를 넣는 화면의 URL에 직접 넣으면 해결되지 않는다. Advanced 탭에 들어가서 serverTimezone에...


  • LocalContainerEntityManagerFactoryBean 에 null 를 리턴할 때

    LocalContainerEntityManagerFactoryBean 을 이용해서 직접 Bean 을 등록할 때 LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); return emf.getObject(); 를 하면 null 이 리턴된다. 이유는 LocalContainerEntityManagerFactoryBean 는 AbstractEntityManagerFactoryBean 을 상속하여 구현하는데 이 클래스의 메소드 afterPropertiesSet() 가 모든 속성값이 세팅이 다 됐음을 알리는 역할을 한다. XML 로 Bean 설정을 하면 BeanFactory 가 이 메소드를 호출하지만...