我试图保留JAXB生成的对象。这是示例结构:
@Column(name = "reporting_identifier") private String reportingIdentifier; @Column(name = "apply_quiet_time") private boolean applyQuietTime; @Embedded private RecipientDetailsList recipientDetailsList;
下面是RecipientDetailsList类的结构:
RecipientDetailsList
@ElementCollection(targetClass=String.class) private List<RecipientDetails> recipientDetails;
现在,RecipientDetails该类具有一个参数构造函数,它接受一个String。我想将该字符串作为整个记录的一部分保留在数据库中。我看到了
RecipientDetails
org.hibernate.InstantiationException:实体的默认构造函数:RecipientDetailsList
尝试保存对象时发生异常。我有两个问题:
我们是否有任何例外处理方法?我无法更改类,因为它是为JAXB编组/解组设计的。我能以某种方式存储对象而不改变结构吗?另外,我只想存储对象的一行,所以只对收件人详细信息引用的列表的第一条记录感兴趣。我希望它忽略多条记录(如果有多条记录)。可能吗?
这种将注释直接用于JAXB生成的类的好设计吗?我是否应该创建另一个类(可能还包括映射器/转换器)来存储和检索信息?
对于您的第一个问题:之所以发生,是因为当Hibernate尝试创建bean时,它是通过反射来完成的。它通过调用no- arg构造函数,然后使用setter方法设置属性来创建对象。您不能使用没有no-arg构造函数的bean。
对于第二个问题:如果其他东西为您生成了没有no- arg构造函数的类,那么实际上唯一的选择(如果您不能修改该类)是围绕它创建一个包装器,或者是一个子类有一个无参数的构造函数。如果您不能直接修改该类,那么我看不到任何其他方法。但是,只要您拥有的类对方法具有足够的可见性(即,没有不可以使用的私有方法),子类就应该很好。