EclipseLink預設啟用lazy, 但須透由LoadTimeWeaver lib來代理集成才有其效用, 本篇是透由Container的loadTimeWeaver進行配置, 以下為啟用範例(spring-data-jpa + eclipseLink):

1.spring configuration, 必須透由標注啟用LoadTimeWeaving, 並實作LoadTimeWeavingConfigurer interfaces來配置container的loadTimeWeaver:


@Configuration
...
@EnableLoadTimeWeaving
public class AppConfig implements LoadTimeWeavingConfigurer {
    ...
    /** 此Container環境是glassfish, 若為tomcat可用TomcatLoadTimeWeaver */
    @Override
    public LoadTimeWeaver getLoadTimeWeaver() {
        return new GlassFishLoadTimeWeaver();
    }

2.spring configuration增加loadTimeWeaver Bean, 並將LocalContainerEntityManagerFactoryBean設定loadTimeWeaver屬性:


...
public class AppConfig implements LoadTimeWeavingConfigurer {
    ...
    @Bean
    public GlassFishLoadTimeWeaver loadTimeWeaver() {
        return new GlassFishLoadTimeWeaver();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
        LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
        entityManagerFactoryBean.setJtaDataSource(dataSource());
        entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter());
        entityManagerFactoryBean.setLoadTimeWeaver(loadTimeWeaver());
        ...
    } 

3.大功告成, enjoy~