Компонент типа 'org.hibernate.SessionFactory', который не может быть найден - PullRequest
0 голосов
/ 24 июня 2018

Я новичок в веб-разработке на Java, и у меня много проблем с работой в Hibernate. Я посмотрел много примеров в Интернете о том, как это сделать, и до сих пор мне не повезло заставить его работать. Я замечаю какой-то шаблон, который они используют в Интернете, многие из них идут как ниже.

@Autowired
private SessionFactory sessionFactory;

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();

// do something with session

session.getTransaction().commit();

Однако всякий раз, когда я пытаюсь сделать это в своем проекте, я получаю сообщение об ошибке

Field sessionFactory in com.bT.practice.WebMySQLAspects.dao.StudentDAOImpl required a bean of type 'org.hibernate.SessionFactory' that could not be found.

Я действительно смущен этим и не смог найти хорошего примера на веб-сайте hibernate о том, как это сделать. Я использую http://start.spring.io/ для загрузки своего приложения. Ниже - мой код.

ЛИЦО

package com.bT.practice.WebMySQLAspects.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="student")
public class Student {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;
    @Column(name="first_name")
    private String firstName;
    @Column(name="last_name")
    private String lastName;
    @Column(name="email")
    private String email;

    public Student() {

    }

    public Student(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";
    }

}

ОСУЩЕСТВЛЕНИЕ ДАО

 package com.bT.practice.WebMySQLAspects.dao;

 import java.util.List;

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

 import com.bT.practice.WebMySQLAspects.entity.Student;

    @Repository
    public class StudentDAOImpl implements StudentDAO {
        @Autowired
        private SessionFactory sessionFactory;

        @Override
        public List<Student> getStudents() {
            Session session = sessionFactory.getCurrentSession();
            session.beginTransaction();
            List<Student> students = session.createQuery("from Student order by lastName").list();
            session.getTransaction().commit();
            return students;
        }
    }

РЕАЛИЗАЦИЯ ОБСЛУЖИВАНИЯ

package com.bT.practice.WebMySQLAspects.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.bT.practice.WebMySQLAspects.dao.StudentDAO;
import com.bT.practice.WebMySQLAspects.entity.Student;

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentDAO studentDAO;

    @Override
    @Transactional
    public List<Student> getStudents() {
        return studentDAO.getStudents();
    }

}

CONTROLLER

package com.bT.practice.WebMySQLAspects.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.bT.practice.WebMySQLAspects.entity.Student;
import com.bT.practice.WebMySQLAspects.service.StudentService;


@RestController
@RequestMapping("/api")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping("/students/show")
    public List<Student> getStudents() {
        List<Student> students = studentService.getStudents();
        return students;
    }
}

application.properties

spring.datasource.driverClssName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false
spring.datasource.username=username
spring.datasource.password=password

1 Ответ

0 голосов
/ 24 июня 2018

Поскольку hibernate существует уже почти два десятилетия, многие учебники ужасно устарели.Вам будет намного легче, если вы будете использовать учебники, выпущенные за последние несколько лет.

Первоначально спящий режим можно было получить только определенным образом, используя Sessions, полученный из SessionFactory.В 2006 году стандарт Java Persistence API создал общий способ доступа к объектным реляционным сопоставителям в Java через EntityManagers, полученный из EntityManagerFactory.На его дизайн сильно повлияла команда Hibernate, и он стал предпочтительным способом доступа к Hibernate с выпуском Hibernate 3.2 осенью 2006 года.

То есть, учебники, которые вы нашли, устарели уже более десяти лет.,Чтобы увидеть, как это делается сейчас, посмотрите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...