Spring Boot:休眠配置

Posted

技术标签:

【中文标题】Spring Boot:休眠配置【英文标题】:Springboot : Hibernate Configuration 【发布时间】:2018-12-16 06:15:22 【问题描述】:

我添加了 application.properties 文件,如下所示:

Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.url = jdbc:mysql://localhost:3306/test?useSSL=false spring.datasource.username = root spring.datasource.password = root

休眠属性 SQL 方言使 Hibernate 为所选数据库生成更好的 SQL spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect

Hibernate ddl auto (create, create-drop, validate, update) spring.jpa.hibernate.ddl-auto = create

spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

对于 dao 层,类:

package com.repository;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;

@Repository
public class DaoClass

    @Autowired
    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory()
    
        return sessionFactory;
    

    @Bean
    public void setSessionFactory(SessionFactory sessionFactory)
    
        this.sessionFactory = sessionFactory;
    

现在在运行 springboot 应用程序时,我面临以下错误:

***************************应用程序启动失败


说明:

com.repository.DaoClass 中的字段 sessionFactory 需要一个 bean 键入找不到的“org.hibernate.SessionFactory”。

行动:

考虑定义一个“org.hibernate.SessionFactory”类型的bean 你的配置。

POM.xml

<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>springboot</groupId>
	<artifactId>firstprogram</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.2.RELEASE</version>
	</parent>
	<name>firstprogram Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.3.6.Final</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>			
		</dependency>

	</dependencies>
	<build>
		<finalName>firstprogram</finalName>
	</build>
</project>

我也添加了

package com.repository;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Component;

@Component
public class DaoClass

    @PersistenceContext
    private EntityManager entityManger;

    public EntityManager getEntityManger()
    
        return entityManger;
    

    public void setEntityManger(EntityManager entityManger)
    
        this.entityManger = entityManger;
    

【问题讨论】:

required a bean of type 'org.hibernate.SessionFactory' that could not be found的可能重复 关于添加上述解决方案,面临空指针异常 【参考方案1】:

Spring boot 不会自动配置SessionFactory,而是配置EntityManagerFactory,您可以直接使用或通过以下方式从中获取SessionFactory

SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);

【讨论】:

我以为我们正在使用spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext 来配置会话工厂

以上是关于Spring Boot:休眠配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Data JPA:休眠会话问题

Spring Boot Jpa:默认休眠?

使用 spring-boot 和 spring-data 全局启用休眠过滤器

休眠验证不使用 Spring Boot LocalValidatorFactoryBean

在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别

带有休眠应用程序的 Spring Boot 无法启动