spirng4 spring data jpa配置记录

本文来自http://fair-jm.iteye.com/ 转截请注明出处

 

前几天看spring实战(第四版)的spring-data-jpa部分 自己也动手实践了下 发现了一些问题

这边记录一下问题排除后的配置

 

首先是pom,这本书最不好的一点就是不告诉你要哪些依赖包。

我在动手实践的时候发现hibernate 5.2.1和spring4.2会出现flashMode方法找不到,查了下发现是hibernate在一个版本突然移除了这个方法,结果spring4.2以上跪了,我用的是spring4.3.2但是依赖的最新的spring-data-jpa依旧间接依赖4.2.6的spring-jdbc和spring-orm,在pom里直接依赖4.3.2的以上两个jar后问题排除。

pom(也包含web的 看这本书一路配过来的):

 

    

        
        1.8
        UTF-8
        UTF-8

        
        3.1.0

        
        4.3.2.RELEASE
        1.10.2.RELEASE

        
        1.1.7
        1.7.21

        
        4.11

        
        3.4
        5.1.39
        1.0.1.Final
        5.2.1.Final
        1.0.24
        2.8.1
        1.8.9
    

    
        
            org.springframework
            spring-webmvc
            ${spring-framework.version}
        
        
            org.springframework.data
            spring-data-jpa
            ${spirng-data-jpa.version}
        
        
            org.springframework
            spring-orm
            ${spring-framework.version}
        
        
        
            javax.servlet
            javax.servlet-api
            ${servlet.version}
            provided
        

        
        
            org.springframework
            spring-tx
            ${spring-framework.version}
        

        
        
            org.slf4j
            slf4j-api
            ${slf4j.version}
        
        
            ch.qos.logback
            logback-classic
            ${logback.version}
        
        
        
        
            org.hibernate.javax.persistence
            hibernate-jpa-2.0-api
            ${hibernate-jpa.version}
        
        
            org.hibernate
            hibernate-core
            ${hibernate.version}
        
        
            mysql
            mysql-connector-java
            ${mysql.version}
        
        
            com.alibaba
            druid
            ${druid.version}
        

        
        
            org.apache.commons
            commons-lang3
            ${common-lang.version}
        
        
            com.fasterxml.jackson.core
            jackson-databind
            ${jackson.version}
        
        
            org.aspectj
            aspectjrt
            ${aspectj.version}
        
        
            org.aspectj
            aspectjweaver
            ${aspectj.version}
        

        
        
            org.springframework
            spring-test
            ${spring-framework.version}
            test
        
        
            junit
            junit
            ${junit.version}
            test
        
    

 

 

db的配置和书上也有少许不同:

 

@Configuration
//repository所在的package
@EnableJpaRepositories(basePackages = "com.xxx.db")
@EnableTransactionManagement
@Profile("dev")
public class DbDevConfig {

    @Bean(initMethod = "init", destroyMethod = "close")
    public DataSource dataSource() {
        final DruidDataSource source = new DruidDataSource();
        source.setUrl("jdbc:mysql://localhost:3306/xxx");
        source.setUsername("");
        source.setPassword("");
        source.setInitialSize(1);
        source.setMinIdle(1);
        source.setMaxActive(20);
        source.setDriverClassName("com.mysql.jdbc.Driver");
        return source;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        final HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setDatabase(Database.MYSQL);
        adapter.setShowSql(true);
        adapter.setGenerateDdl(false);
        adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5Dialect");
        return adapter;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        final LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
        emfb.setDataSource(dataSource());
        emfb.setJpaVendorAdapter(jpaVendorAdapter());
        //实体所在的package
        emfb.setPackagesToScan("com.xxx.domain");
        emfb.afterPropertiesSet();
        return emfb;
    }

    @Bean
    public JpaTransactionManager transactionManager() {
        return new JpaTransactionManager(entityManagerFactory().getObject());
    }
}

 书上没有配置emfb的packagesToScan,会导致运行时报persistence.xml找不到的错误,而根据书上说的用containerEntityManager的方式配置是不需要这个xml的。

 

 

在使用repository的时候如果用getOne会抛出no session的异常,而用findOne不会.估计又是惰性加载的问题。

 

估计用spring-boot会省力很多吧,不过排错什么的就更麻烦了。

 

你可能感兴趣的:(java菜鸟笔记)