当前位置: 首页 > 面试题库 >

Hibernate注释:实体没有默认的构造函数

黄弘深
2023-03-14
问题内容

我试图保留JAXB生成的对象。这是示例结构:

@Column(name = "reporting_identifier")
private String reportingIdentifier;
@Column(name = "apply_quiet_time")
private boolean applyQuietTime;
@Embedded
private RecipientDetailsList recipientDetailsList;

下面是RecipientDetailsList类的结构:

@ElementCollection(targetClass=String.class)
private List<RecipientDetails> recipientDetails;

现在,RecipientDetails该类具有一个参数构造函数,它接受一个String。我想将该字符串作为整个记录的一部分保留在数据库中。我看到了

org.hibernate.InstantiationException:实体的默认构造函数:RecipientDetailsList

尝试保存对象时发生异常。我有两个问题:

  1. 我们是否有任何例外处理方法?我无法更改类,因为它是为JAXB编组/解组设计的。我能以某种方式存储对象而不改变结构吗?另外,我只想存储对象的一行,所以只对收件人详细信息引用的列表的第一条记录感兴趣。我希望它忽略多条记录(如果有多条记录)。可能吗?

  2. 这种将注释直接用于JAXB生成的类的好设计吗?我是否应该创建另一个类(可能还包括映射器/转换器)来存储和检索信息?


问题答案:

对于您的第一个问题:之所以发生,是因为当Hibernate尝试创建bean时,它是通过反射来完成的。它通过调用no-
arg构造函数,然后使用setter方法设置属性来创建对象。您不能使用没有no-arg构造函数的bean。

对于第二个问题:如果其他东西为您生成了没有no-
arg构造函数的类,那么实际上唯一的选择(如果您不能修改该类)是围绕它创建一个包装器,或者是一个子类有一个无参数的构造函数。如果您不能直接修改该类,那么我看不到任何其他方法。但是,只要您拥有的类对方法具有足够的可见性(即,没有不可以使用的私有方法),子类就应该很好。



 类似资料:
  • 问题内容: 我遇到这个错误: 不知道为什么我得到那个例外 进出口运行 主 这是我的 课 当我保存,更新和删除它时,它可以正常工作,所以我不知道我在做什么错 EDIT1 在这里是principal.Cliente 问题答案: 我可以说缺少默认构造函数,

  • 问题内容: 我遇到这个错误: 不知道为什么我得到那个例外 我正在运行 主要 这是我的 课 当我保存,更新和删除它时,它可以正常工作,所以我不知道我在做什么错 EDIT1 在这里是principal.Cliente 问题答案: 我可以说缺少默认构造函数,

  • 有人能帮助实现没有注释的Guice吗? pom。xml 我所尝试的: 我得到的错误是: 我理解这个错误。 但是我希望我可以“指向”Guice到正确的构造函数......而不是使用注释。 如您所见,使用默认/空构造函数不是一个好选择,因为这个示例很简单,但我想坚持使用基于构造函数的注入。 附加: 根据我在评论中从赫曼特·辛格那里得到的“暗示”,我想我离得更近了。 我创建了一个ProductionIn

  • 问题内容: 我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要)。他们将不得不为某些类创建构造函数,并为其添加一些方法。稍后,使用我提供的测试功能,他们将检查是否正常。 我想做的是 通过反思 创建一个我想测试的类的新实例。问题在于,有时 没有默认构造函数 。我不在乎, 我想创建一个实例并自己初始化实例变量 。有什么办法吗?很抱歉,如果以前已经有人问过这个问题,但我找不到任何答

  • 问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题

  • 问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题