首页 > 解决方案 > 找不到 Spring Boot 启动休眠配置

问题描述

您好我正在尝试使用spring boot创建一个学生webapp,但我似乎无法让它运行,因为每次找不到hibernate sessionfactory时都会出现错误,我应该在我的配置。

我以为我正确配置了 webapp,但我似乎无法让它找到我在 DAO 中配置的休眠会话工厂,任何关于我哪里出错的帮助将不胜感激。

这里是 Spring Boot 启动器类

@SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class)
@ComponentScan({"model", "controller", "dao", "service"})
public class StudentsApplication {

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

}

这是我的 DAO 课程

@Repository
@Transactional
public class StudentDao {
    
    @Autowired
    SessionFactory sessionFactory;
    
    public Student getStudent(final int id) {
        @SuppressWarnings("unchecked")
        TypedQuery<Student> q = sessionFactory.getCurrentSession().createQuery(
                "from student where = id").setParameter("id", id);

        return q.getSingleResult();
    }

    public List<Student> getAllStudents() {
        @SuppressWarnings("unchecked")
        TypedQuery<Student> q = sessionFactory.getCurrentSession().createQuery(
                "from student");

        return q.getResultList();
    }

    public void addStudent(final Student student) {
        sessionFactory.getCurrentSession().save(student);
    }

    public void updateStudent(final Student student) {
        sessionFactory.getCurrentSession().saveOrUpdate(student);
    }

    public void deleteStudent(final int id) {
        sessionFactory.getCurrentSession().createQuery(
                "delete from student where = id").setParameter("id", id)
                .executeUpdate();
    }

}

这是我的配置类

@Configuration
@PropertySource({"classpath:application.properties"})
public class DbConfig {

    @Autowired
    private Environment environment;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getProperty("jdbc.url"));
        dataSource.setUsername(environment.getProperty("jdbc.username"));
        dataSource.setPassword(environment.getProperty("jdbc.password"));

        return dataSource;
    }

    @Bean
    public LocalSessionFactoryBean getSessionFactory() {
        LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
        factoryBean.setDataSource(dataSource());

        Properties props = new Properties();
        props.put("format_sql", "true");
        props.put("hibernate.show_sql", "true");

        factoryBean.setHibernateProperties(props);
        factoryBean.setPackagesToScan("com.alpheus.students.entity");
        // factoryBean.setAnnotatedClasses(Student.class);
        return factoryBean;
    }

    @Bean
    public HibernateTransactionManager getTransactionManager() {
        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
        transactionManager.setSessionFactory(getSessionFactory().getObject());
        return transactionManager;
    }

}

这是我的属性文件

# Connection url for the database
spring.datasource.url=jdbc:mysql://localhost:3308/week04
spring.datasource.username=user
spring.datasource.password=pass

server.port=9999

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

#view resolver
spring.mvc.view.prefix=/views/
spring.mvc.view.suffix=.jsp

这是我的控制器类

@Controller
public class StudentController {
    
    @Autowired
    private StudentService studentService;
    
    @GetMapping("/home")
    public String getAllStudents(Model studentsModel) {
        List<Student> listStudents = studentService.getAllStudents();
        studentsModel.addAttribute("listStudents", listStudents);
        return "student-list";
    }
    
    @GetMapping("/student/{id}")
    public String editStudent(@PathVariable int id, Model studentModel) {
        studentModel.addAttribute("student", studentService.getStudent(id));
        return "student-form";
    }
    
    @PostMapping("/student/new")
    public String saveStudent(@ModelAttribute("student")Student student) {
        studentService.addStudent(student);
        return "redirect:/";    
    }
    
    @GetMapping("/student")
    public String showNewForm() {
        return "student-form";
    }
    
    
    @PostMapping("/student/update/{id}")
    public String updateStudent(@ModelAttribute("student") Student student) {
        studentService.updateStudent(student);
        return "redirect:/";
    }
    
    
    @GetMapping(value = "/student/delete/{id}")
    public String deleteStudent(@PathVariable int id) {
        studentService.deleteStudent(id);
        return "redirect:/";
    }
}

标签: javaspring-boothibernatejpa

解决方案


推荐阅读