버전 대응 관계

Spring Boot가 없으면 BOM이 자동으로 버전을 맞춰주지 않으므로, Spring Data JPA의 버전이 요구하는 Spring Framework 버전을 직접 맞춰야 한다.

Spring Data JPA 요구 Spring Framework 기본 Hibernate
1.11.x 4.3.x 5.0.x
2.0.x 5.0.x 5.2.x
2.1.x 5.1.x 5.3.x
2.2.x 5.2.x 5.4.x
2.3.x ~ 2.7.x 5.2.x ~ 5.3.x 5.4.x ~ 5.6.x
3.0.x+ 6.0.x+ 6.1.x+

Spring Data JPA 공식 문서에 명시된 내용으로, 마이너 버전 불일치만으로도 런타임 오류가 발생할 수 있음.


직접 설정해야 하는 것들

Spring Boot가 해주던 자동 구성(Auto Configuration)을 전부 수동 구성 해야 함.

1. DataSource 설정

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="jdbcUrl" value="jdbc:mysql://..."/>
    ...
</bean>

2. EntityManagerFactory 설정

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example.domain"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

3. TransactionManager 설정

<bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

4. Spring Data JPA Repository 스캔 활성화

<jpa:repositories base-package="com.example.repository"/>

또는 Java Config라면:

@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository")
@EnableTransactionManagement
public class JpaConfig { ... }

주의할 점

Spring Data Release Train BOM을 직접 선언해야 함. Spring Boot가 없으면 이게 없어서 버전 충돌이 나기 쉽다.