spring - : 在类路径资源中定义名称为“entityManagerFactory”的 bean 创建错误
问题描述
我从 spring.io 创建了一个 Spring Boot 示例并添加了这个依赖项:web、jpa、driver db2,但是我有这个错误
org.springframework.beans.factory.BeanCreationException:在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]中定义名称为“entityManagerFactory”的bean创建错误:通过工厂方法进行的bean实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]:工厂方法 'entityManagerFactory' 抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: sun/io/ByteToCharConverter at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:645) ~[spring-beans-5.2.1.RELEASE.jar:5.2 .1.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver。工厂方法“entityManagerFactory”抛出异常;嵌套异常是 java.lang.NoClassDefFoundError: sun/io/ByteToCharConverter at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.1.RELEASE.jar:5.2 .1.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:640) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE] ... 20常见框架省略 原因:java.lang.NoClassDefFoundError: sun/io/ByteToCharConverter at hit.db2sql.k.(DashoA8514) ~[hitjdbcdb2.jar:na] at hit.db2sql.jb(DashoA8514) ~[hitjdbcdb2.jar: na] 在 hit.db2sql.jc(DashoA8514) ~[hitjdbcdb2.jar:na] 在 hit.db2sql.ab.a(DashoA8514) ~[hitjdbcdb2.jar:na] 在命中。
我的实体类
package com.example.springboot.model;
//import javax.persistence.*;
import java.io.Serializable;
import javax.persistence.*;
@Table(name = "employee")
@Entity(name = "employee")
public class Employee implements Serializable {
@Id
@SequenceGenerator(name = "bs",sequenceName = "bike_seq",allocationSize = 1)
@GeneratedValue(strategy = GenerationType.AUTO,generator = "bs")
private long empid;
@Column(columnDefinition = "VARCHAR2(20)")
private String empname;
public long getEmpid() {
return empid;
}
public void setEmpid(long empid) {
this.empid = empid;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
}
零件
package com.example.springboot.control;
import com.example.springboot.model.Employee;
import com.example.springboot.repos.EmpRep;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/s")
public class EmpCont {
@Autowired
private EmpRep empRep;
@GetMapping("/a")
public List<Employee> bikes()
{
return empRep.findAll();
}
}
repository
package com.example.springboot.repos;
import org.springframework.data.jpa.repository.JpaRepository;
public interface EmpRep extends JpaRepository {
}
应用程序属性
spring.jackson.serialization.INDENT_OUTPUT=true
spring.datasource.url=jdbc:db2://localhost:50000/SAMPLE
spring.jpa.properties.hibernate.default_schema=pervasive
spring.datasource.username=11
spring.datasource.password=11
spring.datasource.driver-class-name=hit.db2.Db2Driver
spring.messages.basename=messages
server.servlet.context-path=/pervasive
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.DB2Dialect
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>jcc</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--<dependency>-->
<!--<groupId>hit.db2.db2Driver</groupId>-->
<!--<artifactId>hitjdbcdb2</artifactId>-->
<!--<version>1.0</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>com.ibm.db2</groupId>-->
<!--<artifactId>db2jcc</artifactId>-->
<!--<version>8.1</version>-->
<!--</dependency>-->
<dependency>
<groupId>hit.db2.db2Driver</groupId>
<artifactId>hitlicense</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>hit.db2.db2Driver</groupId>
<artifactId>hitjdbcdb2</artifactId>
<version>1.0</version>
</dependency>
<!--<dependency>-->
<!--<groupId>javax.xml.bind</groupId>-->
<!--<artifactId>jaxb-api</artifactId>-->
<!--<version>2.3.0</version>-->
<!--</dependency>-->
<!--<dependency>-->
<!--<groupId>org.hibernate.validator</groupId>-->
<!--<artifactId>hibernate-validator</artifactId>-->
<!--<version>6.0.16.Final</version>-->
<!--</dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
解决方案
您需要向spring data jpa存储库提供hibernate实体(Employee.class)和主键的数据类型(Long)。正确的实现是
@Repository
public interface EmpRep extends JpaRepository<Employee, Long> {}
推荐阅读
- python - sqlalchemy中过滤器函数的无异常返回格式
- localhost - index.html 是否始终是根目录中的独立文件?
- java - 创建 ByteBuddy 子类的典型时间是 25 毫秒吗?
- python-2.7 - 如何使用坐标对绘制网络
- spring-data-jpa - Spring Data Jpa 查询生成:`IgnoreCase` 不适用于`exists`
- logstash - 使用消息本身的值克隆 logstash 事件 N 次
- sql - 如何选择2个多条件列的结果
- android - 从 Firebase 搜索 EditText 值
- python - 如何停止将opencv帧流式传输到浏览器
- ios - 在混合的 Objective-C/Swift 库中找不到静态链接的 swift 模块