Я установил двустороннее отношение «один ко многим» / «многие к одному» для класса User и класса Pet (для академического веб-проекта на тему зоомагазина). Каждый пользователь владеет коллекцией домашних животных.
Кажется, что отношения работают нормально, потому что когда я выполняю запрос, чтобы выбрать первого пользователя в моей базе данных в браузере запросов HQL NetBeans, я вижу, что атрибут "Pets" имеет 2 идентификатора объекта Java в списке, предположительно два домашние животные, на которых я ссылаюсь через внешний ключ ( [HibernateBeans.Pet@76838e, HibernateBeans.Pet@b71950] ).
Удивительно (и неправильно), мой код ниже возвращает пустую коллекцию, когда я передаю точно того же пользователя, к которому я успешно запросил:
public ArrayList<Pet> getPets(User user) {
Set<Pet> pets = null;
try {
session = HibernateUtil.getSessionFactory().getCurrentSession();
pets = user.getPets();
for (Pet p : pets) System.out.println(p.getPetName());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return pets;
}
EDIT : Согласно советам Тахира, я удалил аннотации из своих классов Java и теперь строго использую отображение POJO XML (но та же проблема сохраняется). Мой исходный код ниже был соответствующим образом обновлен:
Вот соответствующие отображения XML Hibernate:
User.hbm.xml:
<set name="pets" inverse="true">
<key>
<column name="UserID" not-null="true" />
</key>
<one-to-many class="HibernateBeans.Pet"/>
</set>
Pet.hbm.xml:
<many-to-one name="user" class="HibernateBeans.User" fetch="select">
<column name="UserID" not-null="true" />
</many-to-one>
Любая помощь по этому вопросу будет принята с благодарностью. Хотя я впервые публикую вопрос, StackOverflow спас мне жизнь на много поводе.
Заранее спасибо!