我有一个父表(MHS_USER)和与ManyToMany关系映射的关联子表(GROUP)如下(下面的相关代码)
@Entity
@Table(name = "mhs_user")
public class MHSUser extends implements Comparable<User> {
@ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
@JoinTable(name = "user_group_rel", joinColumns = @JoinColumn(name = "mhs_user_id"), inverseJoinColumns = @JoinColumn(name = "group_id"))
public List<Group> getGroups() {
return groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
}
在上面,mhs_user_id是MHS_USER表中的标识列,grp_id是GROUP表中的标识键。 USER_GROUP_REL表是保存两者之间关系的连接表。当我持久化新的User实例时,它按预期工作(通过将记录插入父表和子表)。但是,当我尝试将任何值更新到User实例时,将抛出PropertyAccessException。下面是选择性堆栈跟踪
------------------------------------------------------------------------------------------ [1/14/11 13:59:10:154 CST] 0000004b SystemErr R Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of edu.mayo.hcdm.mhsr.businessobject.Group.id at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171) at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183) ……………………………………………………………………………………………………………………………………………….. ……………………………………………………………………………………………………………………………………………….. ……………………………………………………………………………………………………………………………………………….. ……………………………………………………………………………………………………………………………………………….. [1/14/11 13:59:10:154 CST] 0000004b SystemErr R ... 90 more [1/14/11 13:59:10:154 CST] 0000004b SystemErr R Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) ------------------------------------------------------------------------------------------
由于Hibernate仅在更新时从GROUP表中搜索group_id时出现“对象不是声明类的实例”的错误,因此会让人感到困惑。我在网上发现了很多关于它是一个hibernate错误的线程(我正在使用Hibernate 3.3.1)。有没有人遇到过同样的问题,如果有的话,你是怎么解决的? 任何意见都非常感谢。
答案 0 :(得分:0)
确保groups
列表不包含Group
以外的对象 - 这似乎是最明显的原因。