`

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的 看这本书一路配过来的):

 

    <properties>

        <!-- Generic properties -->
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Web -->
        <servlet.version>3.1.0</servlet.version>

        <!-- Spring -->
        <spring-framework.version>4.3.2.RELEASE</spring-framework.version>
        <spirng-data-jpa.version>1.10.2.RELEASE</spirng-data-jpa.version>

        <!-- Logging -->
        <logback.version>1.1.7</logback.version>
        <slf4j.version>1.7.21</slf4j.version>

        <!-- Test -->
        <junit.version>4.11</junit.version>

        <!-- Other -->
        <common-lang.version>3.4</common-lang.version>
        <mysql.version>5.1.39</mysql.version>
        <hibernate-jpa.version>1.0.1.Final</hibernate-jpa.version>
        <hibernate.version>5.2.1.Final</hibernate.version>
        <druid.version>1.0.24</druid.version>
        <jackson.version>2.8.1</jackson.version>
        <aspectj.version>1.8.9</aspectj.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spirng-data-jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>
        <!-- Other Web dependencies -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Spring and Transactions -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-framework.version}</version>
        </dependency>

        <!-- Logging with SLF4J & LogBack -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
        
        <!-- db related -->
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>${hibernate-jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!-- third part tools -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${common-lang.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>

        <!-- Test Artifacts -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-framework.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

 

 

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会省力很多吧,不过排错什么的就更麻烦了。

 

0
1
分享到:
评论

相关推荐

    spring注解+spring data jpa文档+JPA文档.rar

    Spring框架的核心特性包括依赖注入(DI)和面向切面编程(AOP),并且它还提供了对数据库操作的支持,这主要通过Spring Data JPA和Java Persistence API(JPA)实现。 Spring注解是Spring框架中的一大特色,它极大...

    Spring Data JPA 笔记

    至于压缩包中的“helloworld”文件,可能是一个简单的示例项目,通常会包含一个基础的Spring Data JPA配置,一个实体类,以及对应的Repository接口,用于展示Spring Data JPA的基本用法。通过查看这个例子,你可以更...

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    8. ** Transactions**:Spring Data JPA 使用 Spring 的事务管理支持,可以方便地配置事务边界,确保数据操作的一致性。 9. **JPA Querydsl Support**:Spring Data JPA 还支持 Querydsl,这是一个强大的类型安全的...

    Spring Boot整合SpringDataJPA

    在`pom.xml`或`build.gradle`文件中,我们需要添加Spring Boot的starter-data-jpa依赖,这会自动配置JPA的相关组件,如HikariCP连接池、Hibernate实体管理器等。例如,在Maven的`pom.xml`中: ```xml &lt;groupId&gt;...

    spring学习:spring data jpa

    5. **Auditing**:Spring Data JPA还提供了审计功能,可以自动记录实体的创建时间和修改时间等信息。 6. **Integration with Spring Transaction Management**:Spring Data JPA与Spring的事务管理无缝集成,可以...

    SpringMVC+Spring+Spring Data JPA+Maven

    声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&创建DB,配置好maven便可运行 maven构建项目&问题:...

    Spring Data JPA的优点和难点.pdf

    Spring Data JPA是Spring生态中的一个强大ORM框架,它极大地提高了Java开发者在处理数据库操作时的效率。Spring Data JPA的主要优点在于其高度的开发效率、成熟的语法结构以及与Spring框架的紧密集成。 1. **开发...

    Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例.zip

    在这个"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"中,我们将深入探讨这三个组件如何协同工作,实现高效的数据管理与用户交互。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web应用...

    Spring Data JPA从入门到精通

    4. **Repository接口**:Spring Data JPA的核心是Repository接口,通过继承自定义的Repository接口,开发者可以声明CRUD(创建、读取、更新、删除)操作以及自定义查询方法。 5. **Entity实体**:在Spring Data JPA...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    总结来说,本项目是一个基础的Web开发框架,结合了SpringMVC的MVC设计模式、Spring Data JPA的数据访问层、Hibernate的ORM能力以及FreeMarker的模板引擎,同时还实现了环境配置的灵活切换,为开发高效、可维护的Web...

    Spring Boot使用spring-data-jpa配置Mysql多数据源

    在Spring Boot应用中,使用`spring-data-jpa`来配置MySQL多数据源是一项常见的需求,尤其是在构建大型分布式系统时,为了实现数据隔离、负载均衡或读写分离等目的。本教程将详细介绍如何在Spring Boot项目中配置多个...

    Spring MVC+Spring+Spring data JPA

    你可以从中学习如何配置 Spring Boot,创建 RESTful API,以及如何通过 Spring Data JPA 与数据库进行交互。 综上所述,Spring MVC、Spring 和 Spring Data JPA 的结合为开发高效、可维护的 Java Web 应用提供了...

    spring data jpa jar包

    spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码

    Spring Data JPA.zip

    在项目中引入 Spring Data JPA 和相应的 JPA 实现(如 Hibernate),配置实体扫描路径、数据源、JPA 配置、Repository 扫描等。 **4. 实体类与表的映射** 使用 `@Entity` 注解标记实体类,`@Table` 定义对应的...

    Spring Data JPA Demo

    Spring Data JPA 集成了Spring 的事务管理,可以很方便地配置全局或方法级别的事务。`@Transactional` 注解用于标记需要进行事务处理的方法。 9. **测试** 使用Spring Boot 的测试框架,可以编写单元测试和集成...

    spring data jpa + spring + json demo

    【描述】中的"简单的springMVC入门程序配置Spring data jpa亲测可完美运行"说明这是一个基于Spring MVC的项目,Spring MVC是Spring框架的一部分,用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构模式的...

    spring data jpa 教程

    Spring Data JPA 简化了 JPA(Java Persistence API)的开发,通过约定优于配置的方式,让开发者能够更加专注于业务逻辑而不是数据访问层的实现细节。使用 Spring Data JPA,可以快速搭建起一个基本的数据访问层,...

Global site tag (gtag.js) - Google Analytics