У меня есть следующие две таблицы (которые связаны с безопасностью Spring - но я считаю, что проблема связана с Hibernate):
Table user
Table authority
Таблица user
привязана (через Hibernate) к объекту домена в моем приложении: class User
, который имеет следующие атрибуты (и соответствующие методы получения и установки), которые соответствуют столбцам в таблице user
( кроме коллекции, которая будет объяснена позже):
long uId
String username
String password
...
Collection<GrantedAuthority> authorities
Таблица authority
имеет 2 столбца: UserId
(внешний ключ в таблице user
) и Authority
(например, "ROLE_USER"). Эта таблица НЕ представлена как объект домена, а просто является коллекцией в классе User
.
Чтобы создать отображение, в моем файле .hbm
я использую следующее:
<class name="com.business.project.domain.User" table="user">
<id name="uId" column="UserId"></id>
<property name="username" column="Name" type="java.lang.String" />
<property name="password" column="Password" type="java.lang.String" />
...
<set name="authorities" table="authority">
<key column="UserId" />
<element column="Authority" type="java.lang.String" />
</set>
</class>
В моей реализации DAO в спящем режиме я создаю объект запроса, выполняю запрос и преобразовываю результат в объект User
:
...
Query query = session.createQuery("from User where name = :username");
...
User user = (User) query.uniqueResult();
В этот момент я ожидал бы, что этот объект будет заполнен данными, которые он извлекает из БД (я убедился, что таблицы заполнены правильно тестовыми данными и имена отображений верны в файле отображения).
Однако, вызывая методы getter для различных атрибутов объекта user
, все возвращают NULL
по некоторым причинам. Может кто-то сразу увидеть что-то не так с моей настройкой? Возможно, я неправильно сопоставил коллекцию (с отношением внешнего ключа)? СПАСИБО!
Обновление : вот SQL-запрос, сгенерированный в спящем режиме (взятый из его вывода DEBUG):
Hibernate: select user0_.UserId as UserId1_, user0_.Name as Name1_,
user0_.Password as Password1_ from user user0_ where user0_.Name=?
По какой-то причине он не показывает ничего, связанного с таблицей authority
... означает ли это, что мое отображение неверно?
Редактировать : По совету Божо, я посмотрел на сообщения на консоли при запуске (tomcat), но не увидел ничего необычного:
Feb 16, 2010 10:35:12 AM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.me.project.domain.User -> user
Feb 16, 2010 10:35:12 AM org.hibernate.cfg.HbmBinder bindCollection
INFO: Mapping collection: com.me.project.domain.User.authorities -> authority