java - hibernate 注释 : No default constructor for entity

标签 java hibernate annotations

我正在尝试保留 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: No default constructor for entity: RecipientDetailsList

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

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

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

最佳答案

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

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

关于java - hibernate 注释 : No default constructor for entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452018/

相关文章:

java - Java 注解可以做到这一点吗?

java - 从文件读取返回 null

java - Caused by : java. lang.ClassCastException : java. sql.Timestamp无法转换为java.sql.Date

java - 为什么java类不从实现的接口(interface)继承注解?

java - 是否应该更改 hibernate 生成的代码以满足需要?

java - 如何在没有实体类的情况下使用 Hibernate Criteria API?

android - SQLite 需要具有唯一约束(Android Room 注释)

java - 如何在带有日期字段的java中使类不可变?

java - 服务类应该在java中是单例的吗?

java - @UniqueConstraint 和 @Column(unique = true) 在 hibernate 注释中