Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

하는 데 의의를 둬春

LazyInitializationException @Transactional도 먹히지 않을 때 본문

Java

LazyInitializationException @Transactional도 먹히지 않을 때

Shonir00ng 2024. 2. 8. 15:15

https://velog.io/@maxxyoung/Spring-MyBatis%EC%99%80-JPA-%EB%8F%99%EC%8B%9C-%EC%A0%81%EC%9A%A9%EA%B3%BC-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

 

velog

 

velog.io

 

다음의 포스트를 보고 JPA에 MyBatis를 추가해서 사용하고 있었다.

그런데 엔티티에 FetchType.LAZY를 사용한 부분에서 LazyInitializationException이 발생했다.

이상하게 FetchType.EAGER를 사용하면 동작하는데, 권장되는 방법인 @Transactional을 추가하면 다시 안된다.

이건 뭔가 문제가 있다...😢

 

    /* 코드 생략 */
    
    public class DatabaseConfig {
        /**
         * datasource
         */
        @Bean(name= "dataSource")
        public HikariDataSource dataSource(@Qualifier("hikariConfig") HikariConfig hikariConfig) {
            return new HikariDataSource(hikariConfig);
        }
        @Bean(name= "jpaDataSource")
        public HikariDataSource jpaDataSource(@Qualifier("hikariConfig") HikariConfig hikariConfig) {
            return new HikariDataSource(hikariConfig);
        }
        
        /**
         * jpa entityManagerFactory
         */
        @Bean(name = "entityManagerFactory")
        public LocalContainerEntityManagerFactoryBean entityManager(@Qualifier("jpaDataSource") DataSource dataSource) {
            LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
            em.setDataSource(dataSource);
            em.setPackagesToScan("com.sample.model");

            HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
            em.setJpaVendorAdapter(adapter);

            Map<String, Object> properties = new HashMap<>();
            properties.put("hibernate.ddl-auto", "update");
            properties.put("hibernate.generate-ddl", true);
            properties.put("hibernate.show-sql", false);
            properties.put("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName());
            properties.put("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName());
            properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");

            em.setJpaPropertyMap(properties);

            return em;
        }
    }

 

기존엔 이렇게 같은 Hikari Datasource에 빈 이름을 다르게 주어

sqlSessionFactory에 datasource, entityManagerFactory에 jpaDatasource를 주었는데

jpaDatasource를 지우고 하나로 통일시키니 @Transactional이 예외상황 없이 잘 먹혔다.

 

다음엔 또 무슨 오류가 발생할까...ㅎㅎㅎㅎㅎ

Comments