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

Hibernate使用受保护的默认构造函数失败

景翰音
2023-03-14

我希望Hibernate能够使用受保护的无参数构造函数实例化类,然而,我们得到了:org.Hibernate.hibernateException:Could not instantitate resultClass:com.xxx.installment

更改自:

@VisibleForHibernate
protected Installment() {
}

致:

@VisibleForHibernate
public Installment() {
}

问题已经解决了。我们使用的Hibernate版本:3.6.10.final。

对于什么时候无参数构造函数必须是public而不是protected才能使Hibernate工作,是否有任何规则?

共有1个答案

夏才
2023-03-14

从引用中

https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/persistent-classes.html#persistent--pojo-constructor

所有持久性类都必须有一个默认构造函数(可以是非公共的),以便Hibernate可以使用constructor.newInstance()实例化它们。建议您为Hibernate中的运行时代理生成提供一个至少具有包可见性的默认构造函数。

由于Hibernate用户反射,Hibernate要求构造函数应该是公共的,或者它应该具有包级别的可见性。

 类似资料:
  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数

  • 为什么: 如果一个类不提供任何然后在编译时由编译器给出,但是如果一个类包含,那么默认构造函数不是由编译器提供。 我正在编译下面的代码。它给出了编译错误。 代码: 控制台错误: 当我只调用。工作正常。但是当您想使用参数化构造函数调用

  • 问题内容: 所有, 我正在尝试在一些古老的Java代码中进行一些单元测试(无接口,无抽象等)。 这是一个使用ServletContext的servlet(我假设它是由Tomcat设置的),并且它的数据库信息在web.xml / context.xml文件中设置。现在,我已经弄清楚了如何制作Fake ServletContext,但是代码已经 遍布整个地方(因此替换它是不可行的)。我需要找到一种方法

  • 问题内容: 我知道我在这里问一些严重的101问题… 我有一些课,还有一个延伸课。在我有一个构造函数,它接受一组参数,并对其字段进行设置。派生类(例如)通常不需要进行修改。现在我的IDE给我 “ Foo中没有默认的构造函数” 。从一点点谷歌搜索,这似乎是因为“构造函数没有继承”。因此,一切都很好,但是我现在如何使它工作而不在每个派生类中复制此构造函数?我假设有一个更合理的方法? 问题答案: 使用构造

  • 问题内容: 我试图保留JAXB生成的对象。这是示例结构: 下面是类的结构: 现在,该类具有一个参数构造函数,它接受一个String。我想将该字符串作为整个记录的一部分保留在数据库中。我看到了 org.hibernate.InstantiationException:实体的默认构造函数:RecipientDetailsList 尝试保存对象时发生异常。我有两个问题: 我们是否有任何例外处理方法?我无

  • 问题内容: 按照JPA的要求,类应具有默认的(非arg)构造函数,以在从数据库中检索对象时实例化这些对象。 在Kotlin中,可以很方便地在主构造函数中声明属性,如以下示例所示: 但是,当将非arg构造函数声明为辅助构造函数时,它要求传递主要构造函数的值,因此需要一些有效值,例如: 如果属性的类型比just更复杂,并且它们不能为null,那么为它们提供值看起来是非常糟糕的,尤其是当主要构造函数和块