Hibernate один-ко-многим не может инициализировать коллекцию - PullRequest
3 голосов
/ 07 сентября 2011

У меня есть две таблицы базы данных, User и PageComment.Используя Hibernate, я пытаюсь сохранить набор объектов PageComment в комментарии пользователя (комментарии, сделанные этому пользователю), используя отношение «один ко многим» в XML-файлах hbm.

Проблема заключается в том,Кажется, я могу извлечь набор из объекта User, но как только я пытаюсь получить доступ к любому из объектов, хранящихся в наборе, или даже получить доступ к методам, включенным в класс набора (то есть size ()),JVM выдает «org.hibernate.exception.GenericJDBCException: не удалось инициализировать коллекцию».Я в растерянности.

HBM Для таблицы пользователей:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="User" table="user">
    <id name="username" column="Username" type="string">
        <generator class="assigned"></generator>
    </id>
    <property name="password" column="Password" type="string"></property>
    <property name="firstname" column="Firstname" type="string"></property>
    <property name="surname" column="Surname" type="string"></property>
    <property name="email" column="Email" type="string"></property>
    <property name="admin" column="Admin" type="integer"></property>

    <set name="commentsMadeTo" inverse="true">
        <key column="userMadeTo"/>
        <one-to-many class="PageComment"/>
    </set>
</class>
</hibernate-mapping>

HBM Для PageComment:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="PageComment" table="PageComment">
    <composite-id>
        <key-property name="userMadeBy" column="UserMadeBy" type="string" />
        <key-property name="userMadeTo" column="UserMadeTo" type="string" />
        <key-property name="time" column="Time" type="integer" />
        <generator class="assigned"></generator>
    </composite-id>
    <property name="commentText" column="CommentText" type="string"></property>

    <many-to-one name="userMadeTo" column="Username" not-null="true" class="User" />
</class>
</hibernate-mapping>

Я пытаюсь проверитьотображение с помощью этого метода:

Session session = sessionFactory.openSession();
User theUser = (User)session.createQuery("FROM User WHERE Username='Samat'").uniqueResult();
System.out.println("Trying to print out all comments made to 'Samat'");
Set<PageComment> theComments = theUser.getCommentsMadeTo();
for(PageComment p: theComments){
    System.out.println(p.getAllData());
}

1 Ответ

0 голосов
/ 07 сентября 2011

Я замечаю, что в отображении отношений есть некоторые проблемы

HBM для таблицы пользователя:

 <set name="commentsMadeTo" inverse="true">
        <key column="XXXXXXXX"/>
        <one-to-many class="PageComment"/>
  </set>

HBM для PageComment:

<many-to-one name="userMadeTo" column="XXXXXXX" not-null="true" class="User" />

Значение XXXXX представляет имя столбца со стороны «многие» (т. Е. Таблицы PageComment в вашем случае), которая связана со стороной «Один». Он должен иметь одинаковое значение в обоих отображениях hbm.

Попробуйте изменить hbm для таблицы пользователя на:

<set name="commentsMadeTo" inverse="true">
    <key column="Username"/>
    <one-to-many class="PageComment"/>
</set>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...