用maven搭建了一个基于SSH的框架,写单元测试时碰到一个问题。由于我是全注解配置,所以需要spring自动扫描包里面的类,特别是用JPA注解配置的entity类。但是对DAO层做单元测试时,发现一直报“unknown entity”,显然entity未被扫描到。但是类之间的依赖关系都很正常,难道spring只是不扫描JPA注解么?
看一下maven下的项目结构:
src/main/java
src/main/resources
src/test/java
src/test/resources
maven构建的项目源代码和测试代码被分别编译到了target/classes目录和target/test-classes目录,我把classes目录下编译好的entity类的class文件copy到test-classes目录下,运行测试就可以找到entity了,说明spring在扫描JPA的注解时只扫描了test-classes。
单元测试环境和web运行环境的区别只有两个:一个是单元测试环境由测试代码启动spring容器读取配置并初始化,而web运行环境则由web容器来做这件事。另一个区别是单元测试的spring配置文件以及JPA的persistence.xml文件都是另外写的,保存在src/test/resources目录下,也就是说会被编译到test-classes目录。
将persistence.xml文件移动到src/main/resources目录下,运行单元测试,一切正常了!
在网上查到,JPA的entity类要和persistence.xml在一个classpath下(编译后),否则会找不到,不知道这个算bug么?
分享到:
相关推荐
@Component、@ComponentScan、@Configuration、@Bean:这些注解用于指定组件和Bean配置信息,其中@ComponentScan用于组件扫描,@Bean用于产生bean并交由Spring管理,而@Configuration用于声明配置类。 @Autowired、...
- 配置JPA的实体扫描路径,这样Spring才能找到并管理使用了JPA注解的实体类。 2. **JPA注解配置**: - `@Entity`:标记一个类为数据库表的映射,相当于Hibernate的`@Table`。 - `@Id`:标识一个字段为表的主键,...
当Spring Boot应用启动时,JPA会自动扫描`@Entity`类并根据它们生成对应的数据库表。如果表已存在且与实体类匹配,则不会进行更改。如果表不存在,JPA将根据实体类创建表。 6. **使用Repository** 一旦表创建完成...
### QueryDsl自动生成QModel(注解扫描annotation-processor) #### 一、概述 QueryDsl 是一种用于简化查询构建的 Java 库,它通过类型安全的方式帮助开发者编写更清晰、更易于维护的查询语句。而在使用 QueryDsl ...
1. Repository:这是所有 Repository 接口的基类,不包含任何方法,主要用于定义通用的类型信息,使 Spring 能够在扫描时自动识别和配置。 2. CrudRepository:继承自 Repository,提供了基本的 CRUD 功能,如 save...
而使用Spring Data JPA时,只需要配置数据源、JPA供应商(如Hibernate)以及实体扫描路径即可。注解如`@PersistenceContext`可以注入`EntityManager`,`@EntityScan`用于指定实体类的位置。 **5. Spring MVC的处理...
只需将项目打包成WAR文件,放入容器的webapps目录下,容器会自动扫描并加载注解定义的Servlet。 5. **servletDemo**: 这个文件名可能是项目的主要源码文件夹或者包含主Servlet的文件。在其中,可能会看到如何使用...
例如,`@MappingLocations`用于指定映射文件的位置,`@PathPattern`用于定义路径模式,`@AnnotatedClasses`用于标记特定的实体类,而`@Component-scan`则用于自动扫描和注册组件。 ### JPA的关系映射 JPA提供了...
这些注解可以用来标记类,使得Spring能够自动扫描并管理这些类。例如,`@Service`注解常用于标记业务逻辑层的类,Spring会自动将此类实例化并加入到IoC容器中。 另外,Spring的AOP(面向切面编程)也支持注解,比如...
配置方面,Spring Data JPA需要在配置文件中声明数据源、JPA供应商(如Hibernate)、实体扫描路径等。XML配置可以通过`<jpa:repositories>`元素定义Repository的基包,以及`<bean>`标签来配置DataSource和...
5. **定义实体和Repository**:使用JPA的注解(如@Entity、@Table、@Id等)定义实体类,然后创建对应的Repository接口,Spring Data JPA会自动生成实现。 6. **注入并使用EntityManager和Repository**:在需要使用...
在Java项目中,JPA的配置通常通过`pom.xml`文件引入依赖,如Spring Data JPA,然后在`application.properties`或`application.yml`文件中设置数据源、实体扫描路径、JPA供应商(如Hibernate)等相关属性。...
在项目中引入 Spring Data JPA 和相应的 JPA 实现(如 Hibernate),配置实体扫描路径、数据源、JPA 配置、Repository 扫描等。 **4. 实体类与表的映射** 使用 `@Entity` 注解标记实体类,`@Table` 定义对应的...
1. **配置文件**:设置SpringMVC、Hibernate JPA和Spring Data JPA的相关配置,如数据源、实体扫描路径、JPA配置等。 2. **实体类**:定义与数据库表对应的实体类,包含属性和注解。 3. **Repository接口**:定义...
- Spring Boot通过`@EnableJpaRepositories`和`@EntityScan`注解自动配置JPA和实体扫描。 3. **实体(Entity)** - 实体类代表数据库中的表,使用`@Entity`注解标记。 - `@Id`注解标识主键字段,可以配合`...
6. **使用Repository**:Spring Data JPA提供了一种声明式的方法来定义Repository接口,可以自动实现基本的CRUD操作。只需要定义接口,不需要编写具体的实现。 7. **注入并使用**:在需要使用JPA的地方,通过@...
通过配置数据源、JPA供应商(如Hibernate)、实体扫描路径等,Spring Boot会自动配置并启动JPA。同时,Spring Data JPA的自动查询生成能力极大地提高了开发效率,减少了手动编写SQL的繁琐工作。 总的来说,Spring ...
- Mybatis 需要配置 `@MapperScan` 注解扫描 Mapper 接口,自定义 Dao 方法并编写 XML 映射文件。 - JPA 则需要在实体类上添加 `@Entity` 注解,配置 Repository 接口,并实现 `JpaRepository` 接口,可以不写具体...