我有两个表,供应商和公司。
公司已经成立。在创建供应商的同时,我将获得供应商供应商品的公司列表。
列表将包含companies_id,这是公司的主键。 在供应商表中插入供应商详细信息时,我希望将供应商映射到公司表格中的公司。
我正在我的SupplierEO中进行此映射
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER, targetEntity = CompanyEO.class)
@JoinColumn(name="Company_ID")
public Set<CompanyEO> getCompanyEO() {
return companyEO;
}
public void setCompanyEO(Set<CompanyEO> companyEO) {
this.companyEO = companyEO;
}
保存供应商详细信息时出现以下错误
org.hibernate.PropertyAccessException:IllegalArgumentException 发生了调用CompanyEO.carrierId的getter
答案 0 :(得分:0)
为什么不使用@ManyToMany
或@OneToMany
?因为如果CompanyEO
中有多个SupplierEO
,则需要拥有toMany关系。
此外,如果您有多个CompanyEO,请同样称呼它们。将一组公司称为公司是误导性的,特别是对于不了解您的代码的人。
关于您的例外情况:请查看此post。 基本上JB Nizet所说的是:
我的猜测是Hibernate使用自己的Set(PersistentSet)实现来调用你的setter,它实现了延迟加载,并且在调用setter时尚未初始化。由于你在这个集合上调用一个方法,它会使set自身处于加载阶段,这会使Hibernate处于一个不一致的状态。
因此,最好使用字段访问而不是属性访问。
编辑:哦,还请添加整个堆栈跟踪,而不是代码而不是块引用。