您好我正在尝试使用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;
}
}
答案 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