在使用
创建hibernate SessionFactory对象时,在hibernate的xml方法中private static final SessionFactory sessionFactory = new Configuration()。configure()。buildSessionFactory();
那么它将调用persistance类的默认构造函数3次它意味着创建Session工厂对象它需要persistance类的默认构造函数但是如果我从我的类中删除默认构造函数并且在这种情况下只有参数构造函数JVM没有提供默认构造函数然后如何创建会话工厂对象?
答案 0 :(得分:3)
实际上,您可以实例化没有0-args构造函数的类;你可以得到一个班级列表'构造函数,选择一个并使用不同的参数调用它。 虽然这是可能的,但我检查它会起作用并且不会有问题,你必须同意这很奇怪。
以Hibernate的方式构造对象(我相信它会调用0-arg构造函数,然后它可能直接通过Reflection修改实例的字段。 也许它知道如何调用setter)稍微反对一个应该在Java中构造的对象如何用适当的参数调用构造函数,以便新对象是你想要的对象。
答案 1 :(得分:0)
Hibernate尝试创建一个bean,它通过反射来实现。它通过调用no-arg构造函数创建对象,然后使用setter方法设置属性。你不能使用没有arg构造函数的bean。
如果您没有默认构造函数,则应该获得异常
org.hibernate.InstantiationException: No default constructor for entity: <ClassName>
更多reading
答案 2 :(得分:0)
默认情况下,Hibernate使用无参数构造函数来实例化pojo类对象。
但是如果默认构造函数不在pojo类中那么它可以使用参数ed构造函数,如果有多个参数ed构造函数那么它会抛出错误
org.hibernate.InstantiationException: No default constructor for entity: <ClassName>