![](/img/trans.png)
[英]Consider defining a bean of type 'org.hibernate.SessionFactory' in your configuration
[英]Consider defining a bean of type 'org.hibernate.SessionFactory' in your configuration. - Spring
嗨,我正在尝试使用 hibernate 在 spring 中连接到我的数据库。
我收到此错误:
应用程序无法启动
说明:
xxx.ClassesImpl 中的字段 sessionFactory 需要一个无法找到的“org.hibernate.SessionFactory”类型的 bean。
行动:
考虑在您的配置中定义一个“org.hibernate.SessionFactory”类型的 bean。
我已经查看了圆顶答案,但无法使其正常工作。
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.oggi</groupId>
<artifactId>diplomski</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>diplomski</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.3.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
类Dao.java
public interface ClassesDao {
void addClasses(Classes classes);
Classes getClassesById(String classId);
void deleteClasses (String classId);
List<Classes> getAllClasses();
}
类Impl.java
@Repository
@Transactional
public class ClassesImpl implements ClassesDao{
@Autowired
private SessionFactory sessionFactory;
@Override
public void addClasses(Classes classes) {
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(classes);
session.flush();
}
@Override
public Classes getClassesById(String classId) {
Session session = sessionFactory.getCurrentSession();
Classes classes = (Classes) session.get(Classes.class, classId);
return classes;
}
@Override
public void deleteClasses(String classId) {
Session session = sessionFactory.getCurrentSession();
session.delete(getClassesById(classId));
session.flush();
}
@Override
public List<Classes> getAllClasses() {
Session session = sessionFactory.getCurrentSession();
Query query =session.createQuery("from Classes");
List<Classes> classes = query.list();
session.flush();
return classes;
}
}
应用程序属性
spring.thymeleaf.cache=false
spring.data.jpa.repositories.enabled=true
spring.jpa.database=mysql
spring.jpa.hibernate.use-new-id-generator-mappings=true
spring.jpa.show-sql=true
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.name=***
spring.datasource.password=***
spring.datasource.url=jdbc:mysql://localhost:8889/***
spring.datasource.username=***
试试这个:复制并粘贴这个 pom.xml。 您的 pom.xml 中有不同版本的休眠 jar,请尝试使用相同版本。 您实际上可以删除所有这些,因为spring-boot-starter-data-jpa已经在管理它们。 也只需删除 msql 的<version>
标记,因为 spring boot 也已经在管理它们。
<?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.oggi</groupId>
<artifactId>diplomski</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>diplomski</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
您的 .properties 文件
spring.thymeleaf.cache=false
spring.datasource.url=jdbc:mysql://localhost:xxxx/yourdbName
spring.datasource.username=blabla
spring.datasource.password=blabla
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.jpa.properties.hibernate.id.new_generator_mappings = true
spring.jpa.properties.hibernate.format_sql = true
您必须声明一个 SessionFactory bean。 在 xml 配置中,它将是这样的。
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="package.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
</props>
</property>
</bean>
使用 Hibernate 5 简单检查以下内容
-- 检查基础包是否扫描 (HibernateConfig.java)
-- 检查文件@Configuration @EnableTransactionManagement 中的有效注释
-- 检查是否创建了所有有效的 bean LocalSessionFactoryBean,HibernateTransactionManager,HibernateTemplate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.