【问题标题】:SessionFactory Object Creation using persistance class default constructor使用持久性类默认构造函数创建 SessionFactory 对象
【发布时间】:2015-02-20 04:03:48
【问题描述】:

在hibernate的xml方法中,当我们使用创建hibernate SessionFactory对象时

private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

然后它将调用持久类的默认构造函数 3 次这意味着创建会话工厂对象它需要持久类的默认构造函数但是如果我从我的类中删除默认构造函数并且在这种情况下只有参数构造函数存在 JVM 不提供那么默认构造函数是如何创建会话工厂对象的呢?

【问题讨论】:

    标签: hibernate sessionfactory


    【解决方案1】:

    实际上,您可以实例化没有 0-args 构造函数的类;您可以获得一个类的构造函数列表,选择一个并使用不同的参数调用它。 虽然这是可能的,而且我检查过它会起作用并且不会有问题,但你必须同意这很奇怪。

    以 Hibernate 的方式构造对象(我相信它会调用 0-arg 构造函数,然后它可能会直接通过反射修改实例的字段。 也许它知道如何调用 setter)有点不利于在 Java 中构造一个对象如何调用具有适当参数的构造函数,以便新对象是您想要的对象。

    【讨论】:

      【解决方案2】:

      Hibernate 尝试创建一个 bean,它通过反射来实现。它通过调用无参数构造函数来创建对象,然后使用 setter 方法设置属性。您不能使用没有无参数构造函数的 bean。

      如果你没有默认构造函数,你应该得到一个异常

      org.hibernate.InstantiationException: No default constructor for entity: <ClassName>
      

      更多reading

      【讨论】:

      • 安迪,谢谢您的回复,但我的 pojo 类中没有任何默认构造函数,它仍然能够保存数据而没有任何错误,那么默认构造函数的用途是什么。
      • Hibernate 在对象创建期间调用该默认构造函数
      【解决方案3】:

      Hibernate 默认使用无参数构造函数来实例化 pojo 类对象。

      但是如果 pojo 类中没有默认构造函数,那么它可以使用参数 ed 构造函数,如果有多个参数 ed 构造函数,那么它会抛出错误

      org.hibernate.InstantiationException: No default constructor for entity: <ClassName>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        • 2018-01-22
        • 2020-12-07
        相关资源
        最近更新 更多