休眠注释:实体没有默认构造函数

     2023-02-24     231

关键词:

【中文标题】休眠注释:实体没有默认构造函数【英文标题】:Hibernate Annotations : No default constructor for entity 【发布时间】:2014-10-16 14:28:20 【问题描述】:

我正在尝试持久化 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 类有一个参数构造函数,它接受一个字符串。我想将该字符串作为整个记录的一部分保留在数据库中。我看到了

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

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

    我们有解决这个异常的方法吗?我无法更改该类,因为它是为 JAXB 编组/解组而设计的。我可以在不改变结构的情况下以某种方式存储对象吗?另外,我有兴趣只存储引用的列表的第一条记录 recipientDetails 因为我只想要一行对象。如果它有超过 1 条记录,我希望它忽略其余记录。有可能吗?

    将注解直接用于由 JAXB 生成的类中是否是好的设计?我是否应该创建另一个类(可能还有映射器/转换器)来存储和检索信息?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

感谢您的回复。我不应该创建一个包含这些类的所有字段的另一个类吗? 不太清楚你的意思。如果您基本上是指复制您拥有的类、字段和所有内容,并添加一个无参数构造函数,那么只要您知道基础类永远不会改变,那么这将起作用。然而,通常生活并不是那么简单。如果可以的话,子类化将是更好的选择。 @user3968762 如果回答有用,请点击勾选接受。 成功了!一个 bean 总是需要一个默认的构造函数。谢谢:D

使用杰克逊的 JSON 反序列化:没有找到适合类型的构造函数 - 可以提供默认构造函数或注释构造函数 [重复]

...没有找到适合类型的构造函数-可以提供默认构造函数或注释构造函数[重复]【英文标题】:JSONdeserialisationusingJackson:Nosuitableconstructorfoundfortype-providingdefaultconstructororannotateconstructorisimposible[duplicate]【发布时间】:2015-07-1619:05:15【 查看详情

实体类中构造函数的疑问

...ame;setname=value;privateintid;publicintIdgetreturnid;setid=value;第一个实体类有构造函数,第二类没有。请问有没有构造函数对实体类有什么影响啊?你的理解是错的,第二个类不是没有构造函数!如果类中没有自定义的构造函数,则会默认... 查看详情

线程“主”javax.persistence.PersistenceException 中的异常:org.hibernate.InstantiationException:实体没有默认构造函数:[重复

】线程“主”javax.persistence.PersistenceException中的异常:org.hibernate.InstantiationException:实体没有默认构造函数:[重复]【英文标题】:Exceptioninthread"main"javax.persistence.PersistenceException:org.hibernate.InstantiationException:Nod 查看详情

缺少 EmbeddedId 实体的默认构造函数

】缺少EmbeddedId实体的默认构造函数【英文标题】:MissdefaultconstructorforentitywithEmbeddedId【发布时间】:2017-10-2412:43:45【问题描述】:当我尝试从JPARepository获取实体列表时,我总是遇到这样的异常org.springframework.orm.jpa.JpaSystemException... 查看详情

休眠:字段“id”没有默认值

】休眠:字段“id”没有默认值【英文标题】:Hibernate:Field\'id\'doesn\'thaveadefaultvalue【发布时间】:2018-07-3107:55:42【问题描述】:我有一个网络应用程序,它有一个数据库Customer实体和Car实体。我在Car和Customer之间有ManyToMany关系(... 查看详情

抽象类可继承实体类(要有明确的构造方法),这句话该怎么理解?

...解释清楚一点,举个例子最好参考技术A抽象类可以extends实体类。其实这就是类之间正常的继承关系。关于构造方法的说明,请看下例:publicclassTest1 //本例中所有类的父类 classA publicA() //这是一个无参构造函数。如果不写这个构... 查看详情

实体类nodefaultconstructorfound找不到默认构造函数;(代码片段)

rootcauseorg.springframework.beans.BeanInstantiationException:Couldnotinstantiatebeanclass[com.hs.model.StudentModel]:Nodefaultconstructorfound;nestedexceptionisjava.lang.NoSuchMethodException:com.hs. 查看详情

构造方法

...回值也不要写void) 空参的构造函数和有参数的构造函数 注释,命名规则!!!!!!!!!!每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。在创建一个对 查看详情

没有为实体类型“Uri”找到合适的构造函数。

】没有为实体类型“Uri”找到合适的构造函数。【英文标题】:Nosuitableconstructorfoundforentitytype\'Uri\'.【发布时间】:2019-03-2814:03:48【问题描述】:我有这个模型:publicclassBookpublicintIdget;set;publicstringNameget;set;publicUriLinkget;set;我使用... 查看详情

错误 C2512 但我有可用的默认构造函数

...函数可用)但我有默认构造函数为什么???我在代码中注释的错误位置请帮助我节点.h#pragmaonce#include"stat.h"#include"Automa 查看详情

声明既没有默认构造函数也没有复制构造函数的成员变量

】声明既没有默认构造函数也没有复制构造函数的成员变量【英文标题】:Declaremembervariablesthatdonothaveadefaultconstructornoracopyconstructor【发布时间】:2019-05-0522:11:18【问题描述】:假设我有一个既没有默认构造函数也没有复制构造... 查看详情

使用注释将单个实体映射到休眠中相同模式的多个表

】使用注释将单个实体映射到休眠中相同模式的多个表【英文标题】:Mappingasingleentitytomultipletablesofsameschemainhibernateusingannotations【发布时间】:2016-03-2912:54:21【问题描述】:我有一个类CustomerProfile,它映射到表CUST_PROFILE。我们需... 查看详情

flutter6种构造函数详解

...工厂构造函数生成构造函数是最常见的构造函数,即生成实体类对象。如果未声明构造函数,则会提供默认构造函数。默认构造函数没有参数,并调用父类无参数构造函数。默认情况下,子类中的构造函数调用父类的未命名无参... 查看详情

kotlin-jpa 插件不生成默认构造函数

...-08-0906:24:09【问题描述】:我正在使用kotlin-jpa为我的kotlin实体生成默认构造函数,但是没有生成:我刚用过:id("org.jetbrains.kotlin.plugin.jpa")version"1.3.2 查看详情

explicit构造函数

...、合成的默认构造函数构造函数,是函数名与类名同样、没有返回类型的特殊的成员函数。能够有初始化列表。默认构造函数,没有形參。或全部形參都有默认实參的构造函数。假设没有显示定义不论什么构造函数,编译器会自... 查看详情

复制构造函数没有合适的默认构造函数

】复制构造函数没有合适的默认构造函数【英文标题】:CopyConstructorhasnoappropriatedefaultconstructor【发布时间】:2012-05-0817:10:58【问题描述】:我在为我的doublependulum班级创建copyconstructor时遇到问题。我在我的doubelpendulum.h文件中创... 查看详情

Spring 在没有 @Autowired 注释的构造函数中注入依赖项

】Spring在没有@Autowired注释的构造函数中注入依赖项【英文标题】:Springinjectsdependenciesinconstructorwithout@Autowiredannotation【发布时间】:2017-04-2620:10:38【问题描述】:我正在尝试来自这个官方Springtutorials的示例,并且依赖于此代码:... 查看详情

这个错误是啥:“没有合适的默认构造函数可用”?

】这个错误是啥:“没有合适的默认构造函数可用”?【英文标题】:Whatisthiserror:"noappropriatedefaultconstructoravailable"?这个错误是什么:“没有合适的默认构造函数可用”?【发布时间】:2012-07-0900:45:02【问题描述】:我得... 查看详情