У меня есть четыре таблицы: USER, CONTACT, CONACT_TYPE и USER_CONTACT
USER_CONTACT хранит все контакты, таблицы которых у пользователя заполнены фиктивными данными:
ТАБЛИЦА ПОЛЬЗОВАТЕЛЯ
USER_ID(int)| FIRST_NAME(varchar(2) | LAST_NAME(varchar(2) |
------------------------------------------------------------
| 1 | TEST | USER |
------------------------------------------------------------
USER_CONTACT
USER_CONTACT_ID(int) | USER_ID(int) | CONTACT_ID(int) |
-------------------------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
-------------------------------------------------------
КОНТАКТ
CONTACT_ID(int) | CONTACT_TYPE_ID(int) | CONTACT(varchar(2)|
-------------------------------------------------------------
| 1 | 2 | (555) 555-5555 |
| 2 | 2 | (555) 593-3938 |
| 3 | 1 | test@oracle.com |
-------------------------------------------------------------
CONTACT_TYPE
CONTACT_TYPE_ID(int) | CONTACT_TYPE |
-------------------------------------
| 1 | EMAIL |
| 2 | PHONE |
-------------------------------------
То, что я пытаюсь сделать, - это создать запрос, который будет возвращать список, содержащий только PHONE CONACT_TYPE, здесь моя функция гибернации до сих пор
public List<UserContact> getUserContactByType(Integer userId, String contactType) {
Session session = getSessionFactory().openSession();
try {
Criteria criteria = session.createCriteria(UserContact.class, "USER_CONACT");
criteria.add(Restrictions.eq("USER_CONACT.userId, userId");
criteria.add(Restrictions.eq("USER_CONTACT.contact.contactType.contactType", contactType);
return (List<UserContact>)criteria.list();
}
}
Каждая таблица сопоставлена с классом модели. Важная информация о классе выглядит следующим образом.
Contact.java
Содержит отношение @ManyToOne к классу ContactType.java
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ContactType contactType;
UserContact.java
Содержит отношение @ManyToOne к классу Contact.java и @ManyToOne для класса User.java
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Contact contact;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
Все классы имеют стандартные методы получения и установки для всех атрибутов столбцов для таблиц выше.
Я получаю сообщение об ошибке, утверждающее, что он не может разрешить свойство contact.contactType моего класса UserContact. Кто-нибудь знает, как правильно выполнить нечто подобное в спящем режиме?