У меня есть родительская таблица (MHS_USER) и связанная дочерняя таблица (GROUP), сопоставленная с отношением ManyToMany следующим образом (соответствующий код ниже)
@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_id из таблицы GROUP только при обновлениях. Я нашел много тем в Интернете о том, что это ошибка гибернации (я использую Hibernate 3.3.1). Кто-нибудь сталкивался с такой же проблемой, и если да, то как вы решили ее решить?
Любой вклад высоко ценится.