Hibernate: org.hibernate.PropertyAccessException: IllegalArgumentException - PullRequest
1 голос
/ 18 января 2011

У меня есть родительская таблица (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). Кто-нибудь сталкивался с такой же проблемой, и если да, то как вы решили ее решить? Любой вклад высоко ценится.

1 Ответ

0 голосов
/ 18 января 2011

Убедитесь, что в списке groups нет объектов, отличных от Group s, - это наиболее очевидная причина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...