当前位置: 首页 > 知识库问答 >
问题:

hibernate不创建sessionFactory bean

鞠宏恺
2023-03-14

我刚接触hibernate并在Spring5中使用它,我有一个配置类创建sessionFactory bean,但它不工作(创建),当我运行我的项目时,我得到这个错误:

异常为org.springframework.beans.factory.beanCreationException:创建com.t4b.project.pricebuy.configuration.hibernateConfig中定义的名称为“会话工厂”的bean时出错:合并bean定义的后处理失败;嵌套异常为java.lang.IllegalStateException:无法从类加载器[ParallelWebAppClassLoader:priceBuy]中自省类[org.SpringFramework.orm.Hibernate5.LocalSessionFactoryBean

// configuration class

    @Configuration
    public class HibernateConfig {


        @Bean
        public LocalSessionFactoryBean sessionFactory() {

        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();

        sessionFactoryBean.setHibernateProperties(properties());
        sessionFactoryBean.setAnnotatedClasses(Tarif.class);

        return sessionFactoryBean;

        }

        @Bean
        public Properties properties() {

            Properties properties = new Properties();

            properties.setProperty(AvailableSettings.URL, "jdbc:mysql://localhost:3306/SPRING-LEARN");
            properties.setProperty(AvailableSettings.USER, "root");
            properties.setProperty(AvailableSettings.PASS, "carrow");
            properties.setProperty(AvailableSettings.DIALECT, MySQL5Dialect.class.getName());
            properties.setProperty(AvailableSettings.SHOW_SQL, String.valueOf(true));
            properties.setProperty(AvailableSettings.HBM2DDL_AUTO, "update");


            return properties;
        }

    }


    public class PriceBuyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            // TODO Auto-generated method stub
            return new Class[] {PriceBuyWebApplicationConfiguration.class, ConverterConfig.class, HibernateConfig.class};
        }

        @Override
        protected String[] getServletMappings() {
            // TODO Auto-generated method stub
            return new String[] {"/"};
        }


    }


    // controller


    @RestController
    @RequestMapping("/tarif")
    public class TarifController {

        @Autowired
        TarifDao TarifDao;

        @RequestMapping(method =  RequestMethod.GET)
        public String saveTarif(Model model) {
            Tarif tarif = new Tarif("CK09", 1234);

            TarifDao.insertTarif(tarif);

            return "tarif";
        }
    }

    // tarif class
package com.t4b.project.priceBuy.entities;

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

@Entity
@Table(name = "tarif")
public class Tarif {

    @Id
    @Column(name ="code")
    private String code;

    @Column(name ="tax")
    private double tax;

    public Tarif(String code, double tax) {
        this.code = code;
        this.tax  = tax; 
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public double getTax() {
        return tax;
    }

    public void setTax(double tax) {
        this.tax = tax;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((code == null) ? 0 : code.hashCode());
        long temp;
        temp = Double.doubleToLongBits(tax);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Tarif other = (Tarif) obj;
        if (code == null) {
            if (other.code != null)
                return false;
        } else if (!code.equals(other.code))
            return false;
        if (Double.doubleToLongBits(tax) != Double.doubleToLongBits(other.tax))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Tarif [code=" + code + ", tax=" + tax + "]";
    }






}

共有1个答案

袁宜民
2023-03-14

最终编辑:您需要删除tarif.class中的构造函数

  public Tarif(String code, double tax) {
        this.code = code;
        this.tax  = tax; 
    }

删除这个。因为hibernate与POJO一起工作。和POJO没有构造函数。现在应该管用了

您需要为模型(实体类)提供hibernate的路径,就像这样(使用setPackagesToScan

  @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan("models");
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
    }
public class PriceBuyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
             return new Class[]{HibernateConfig.class};
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            // TODO Auto-generated method stub
            return new Class[] {PriceBuyWebApplicationConfiguration.class, ConverterConfig.class};
        }

        @Override
        protected String[] getServletMappings() {
            // TODO Auto-generated method stub
            return new String[] {"/"};
        }


    }
 类似资料:
  • 问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 7年前关闭。 我有带有Hibernate和Spring框架的Maven项目。我希望Hibernate自动创建表,但是只是删除所有现有表,并且不创建所需的表。在会话工厂初始化期间不会引发任何异常,但是当我

  • 问题内容: 我注释了一堆POJO,以便JPA可以使用它们在Hibernate中创建表。似乎所有表都被创建,除了一个非常中央的表,称为“修订”。Revision类具有注释,因此它将被重命名为RevisionT,因此与MySQL(目标数据库)中的任何保留字都没有冲突。 我删除整个数据库,重新创建它,然后基本上打开和关闭JPA会话。似乎可以毫无问题地重新创建所有表。 为什么在创建的架构中缺少单个表?可以

  • 启动程序(启动TomCat)后,模式中没有创建表,但是必须自动创建表“player”。 我检查了Hibernate配置,但找不到问题所在。我尝试将hbm2ddl.auto更改为hibernate.hbm2ddl.auto(也包括创建、创建-删除等),但没有帮助。 如果有什么想法,请告诉我。谢了。 实体类: 存储库类: Hibernate配置: pom.xml的完整项目代码可通过链接:https:/

  • 我有两张桌子: 基本上,我想通过id字段定义一个从到的外键,这两个表中的字段是相同的。问题是,当我在IntelliJ Idea中检查数据库时,我在Keys部分没有看到任何外键(检查了两个表),只有它们的PK。这段代码有问题吗?我已经按照另一个类似问题中的建议设置了属性:

  • 问题内容: 我正在使用,并且正在尝试运行一个简单的应用程序,尤其是运行在page中描述的应用程序。我的hibernate.cfg.xml文件是: 我(使用maven时)是: 我在链接中使用它: 但是,不可能获得应用程序的工作,即在数据库中hibernate创建表并插入值。无论尝试如何,我总是会收到相同的错误: 在线上的“关系部门不存在”: 我也没有完全相同的错误尝试过。为了抢占某些读者,请不要在数

  • 我编写了一个映射,如下所示: 当我运行应用程序时,会出现如下错误: 2012-05-15 17:12:38,651--WARN--失败的模式语句:创建表雇员(Id整数不为空auto_increment,版本日期时间不为空,FirstName nvarchar(300),LastName nvarchar(300),雇员类型nvarchar(300),主键(Id),唯一(firstName,last