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

时间:2017-07-23 21:12:58

标签: java spring hibernate maven

您好我正在尝试使用hibernate在spring中实现与数据库的连接。

我收到了这个错误:

申请失败

说明

xxx.ClassesImpl中的字段sessionFactory需要一个类型为' org.hibernate.SessionFactory'的bean。无法找到。

动作:

考虑定义一个类型为#org.hibernate.SessionFactory'的bean。在你的配置中。

我已经查看了圆顶的答案,但无法让它运作起来。

的pom.xml

function pseudoSetTimeout( func, wait ) {
    let timerId,
        promise = new Promise( ( resolve, reject ) => {
            timerId = setTimeout( () => {
                let returnVal = func();
                resolve( returnVal );
            }, wait );
        });

    let result = [timerId, promise];
    console.log ( "returning: ", result );
    return result;
}

function callback() {
    return "Callback fired";
}

let [timeout, promise] = pseudoSetTimeout( callback, 1000 );

promise.then( ( val ) => {
   console.log( val );
});

console.log( "returned timeout: ", timeout );

ClassesDao.java

<?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>

ClassesImpl.java

public interface ClassesDao {

    void addClasses(Classes classes);

    Classes getClassesById(String classId);

    void deleteClasses (String classId);

    List<Classes> getAllClasses();
}

application.properties

@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;
    }

}

3 个答案:

答案 0 :(得分:0)

尝试:复制并粘贴此pom.xml。 你的pom.xml中有不同版本的hibernate 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

答案 1 :(得分:0)

您必须声明一个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>

答案 2 :(得分:0)

使用Hibernate 5简单检​​查以下内容

-检查基本软件包是否已扫描(HibernateConfig.java)

-检查@Configuration @EnableTransactionManagement文件中的有效注释

-检查是否创建了所有有效的bean LocalSessionFactoryBean,HibernateTransactionManager,HibernateTemplate