【发布时间】:2015-11-17 21:13:02
【问题描述】:
我正在使用 Spring boot 和 hibernate 构建应用程序,添加存储库后,我收到了这种错误:
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.2.7.RELEASE:run (default-cli) on project app: An exception occured while running. null: InvocationTargetException: Failed to read candidate component class: file [/home/scabbard/projects/app/app-back-end/target/classes/com/springapp/app/config/RepositoryConfig.class]; nested exception is java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.springframework.data.jpa.repository.config.EnableJpaRepositories.repositoryBaseClass() -> [Help 1]
看起来问题出在 EnableJpaRepositories 上,但不知道原因。
这是其他文件:
存储库文件
package com.springapp.app.repository;
import com.springapp.app.entity.PressEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PressRepository extends JpaRepository<PressEntity, Long> {
}
配置文件
package com.springapp.app.config;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@Configuration
@EnableJpaRepositories("com.springapp.app.repository")
@EnableAutoConfiguration
@EntityScan("com.springapp.app.entity")
public class RepositoryConfig {
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springapp.app</groupId>
<artifactId>app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>App</name>
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1205-jdbc42</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.2.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.2.7.RELEASE</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
【问题讨论】:
-
首先你应该移除依赖hibernate-annotations。这不再是必需的,并且可能导致依赖冲突。其次,我建议使用依赖“spring-boot-starter-data-jpa”而不是“spring-data-jpa”。
-
你能解释一下为什么不需要 Hibernate 依赖项,因为我猜“spring-boot-starter-data-jpa”已经有了它们,但不明白为什么?
-
不需要休眠注释。正如你所看到的,hibernate-annotations 的版本是 3.5.6,所以它已经很老了,在更新的 hibernate 版本中不再需要了。 "spring-boot-starter-data-jpa" 会引入 Hibernate 作为默认的 JPA 提供者,所以你可以选择移除 hibernate-entitymanager 依赖或者留在 POM 中,没关系。
-
感谢您的解释,它确实帮助我解决了我的问题。
标签: java hibernate spring-boot