use*_*762 16 java annotations hibernate
我试图坚持JAXB生成的对象.以下是示例结构:
@Column(name = "reporting_identifier")
private String reportingIdentifier;
@Column(name = "apply_quiet_time")
private boolean applyQuietTime;
@Embedded
private RecipientDetailsList recipientDetailsList;
Run Code Online (Sandbox Code Playgroud)
以下是RecipientDetailsList
课程结构:
@ElementCollection(targetClass=String.class)
private List<RecipientDetails> recipientDetails;
Run Code Online (Sandbox Code Playgroud)
现在,RecipientDetails
该类有一个参数构造函数,它接受一个String.我希望将字符串作为整个记录的一部分保存在数据库中.我看到了
org.hibernate.InstantiationException:没有实体的默认构造函数:RecipientDetailsList
我尝试保存对象时出现异常.我有两个问题:
我们有关于此例外的任何工作吗?我无法更改类,因为它是为JAXB编组/ unmarhsalling而设计的.我可以以某种方式存储对象而不改变结构吗?此外,我感兴趣的是只存储recipientDetails引用的列表的第一条记录,因为我只想要一行对象.如果它有超过1条记录,我希望它忽略其余的记录.可能吗?
这个好的设计是否可以直接将注释用于由JAXB生成的类中?我应该创建另一个类(可能还有mappers /转换器)来存储和检索信息吗?
chi*_*ity 32
对于你的第一个问题:这种情况正在发生,因为当Hibernate尝试创建一个bean时,它会通过反射来实现.它通过调用no-arg构造函数创建对象,然后使用setter方法设置属性.您不能使用没有no-arg构造函数的bean.
对于第二个问题:如果其他东西为你生成了没有no-arg构造函数的类,那么你唯一的选择(如果你不能修改类)就是创建一个包装它的包装器,或者是一个子类有一个无参数的构造函数.如果你不能直接修改类,我没有看到任何其他方法.但是,只要你获得的类对方法具有足够的可见性(即,没有你无法获得的私有方法),子类化应该没问题.
归档时间: |
|
查看次数: |
37822 次 |
最近记录: |