Невозможно выполнить автоматическое подключение sessionFactory в Springboot

Пожалуйста, найдите ниже мой класс daoImpl.

import java.util.List;

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

@Repository
public class EmployeeDaoImpl implements EmployeeDao {

    @Autowired
    private SessionFactory sessionFactory;
    // all my setter  and other methods
}

pom.xml:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <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.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

Код моего приложения springBoot:

package com.sagarp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class EmployeeHibernateApplication {

    public static void main(String[] args) {
        SpringApplication.run(EmployeeHibernateApplication.class, args);
    }

}

Мой файл application.properties:

server.port=8080
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true   

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


## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
#spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext

Сценарий: Когда я запускаю приложение springboot, это невозможно автоматически подключить объект sessionFactory.

P.S: Я знаю, что могу использовать репозиторий spring-jpaandcrud вместо гибернации. Дело в том, что я должен использовать спящий режим. Считайте это ограничением.

Ошибка:

Описание: Для поля sessionFactory в com.sagarp.employee.EmployeeDaoImpl требуется объект bean типа org.hibernate.SessionFactory, который не может быть найден.

Может ли кто-нибудь мне немного помочь здесь

Вы пробовали это. Ему нужно свойство в application.properties и bean-компонент в вашем файле конфигурации.

mallikarjun 19.07.2018 07:57

попробуйте autowire EntityManager и вызовите развертку в SessionFactory

Piotr R 19.07.2018 07:58

вы можете взять ссылку из этого ответа stackoverflow.com/questions/45893879/…

Ajit Soman 19.07.2018 08:00

SessionFactory нет, есть EntityManagerFactory. Тот факт, что вам нужно использовать Hibernate, не означает, что вы не можете использовать JPA ... Hibernate - это (справочная?) Реализация для JPA, поэтому начните с простого JPA, и если вам действительно нужен простой API спящего режима, используйте entitymanager.unwrap(Session.class), чтобы получить базовый сеанс.

M. Deinum 19.07.2018 08:04

@mallikarjun пробовал это, но это бесполезно.

bibliophilsagar 19.07.2018 08:40

Вы знаете, что Hibernate является JPA? (В последних версиях - SessionFactory extends EntityManagerFactory.)

chrylis -cautiouslyoptimistic- 19.07.2018 08:43

@chrylis это справедливо только для Hibernate 5.2 и более поздних версий, до этого этого не было.

M. Deinum 19.07.2018 10:11

@ M.Deinum Таким образом "последние версии".

chrylis -cautiouslyoptimistic- 19.07.2018 19:58

Хотя в последних версиях это также приводит к проблемам в Spring 5.0 при попытке объединить Hibernate и JPA (например, изменение транзакций). В Spring 5.1 вносятся исправления.

M. Deinum 20.07.2018 07:54

@ M.Deinum спасибо за помощь. Я использовал entityManagerFactory

bibliophilsagar 20.07.2018 11:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
10
1 036
1

Ответы 1

Если вы хотите узнать код SessionFactory в Hibernate с версией ниже 5.2

private static final SessionFactory sessionFactory;
 static {
     try {
         sessionFactory = new Configuration().configure().buildSessionFactory();
     } catch (Throwable ex) {
         System.err.println("Initial SessionFactory creation failed." + ex);
         throw new ExceptionInInitializerError(ex);

     }

 }
 public static SessionFactory getSessionFactory() {
     return sessionFactory;
 }

Другие вопросы по теме