繁体   English   中英

考虑在您的配置中定义一个“org.hibernate.SessionFactory”类型的 bean。 - 春天

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM