Mam cztery tabele, USER, kontakt, CONACT_TYPE i USER_CONTACTHibernate pomocy z kryteriami dołączyć zapytanie
USER_CONTACT przechowuje wszystkie kontakty, które użytkownik ma stoliki zapełnione danymi atrapy są następujące
USER TABELA
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 |
-------------------------------------------------------
SKONTAKTUJ
CONTACT_ID(int) | CONTACT_TYPE_ID(int) | CONTACT(varchar(2)|
-------------------------------------------------------------
| 1 | 2 | (555) 555-5555 |
| 2 | 2 | (555) 593-3938 |
| 3 | 1 | [email protected] |
-------------------------------------------------------------
contact_type
CONTACT_TYPE_ID(int) | CONTACT_TYPE |
-------------------------------------
| 1 | EMAIL |
| 2 | PHONE |
-------------------------------------
Co staram się zrobić, to utworzyć kwerendę, która zwraca listę, która ma zawierać tylko CONACT_TYPE PHONE tutaj jest mój hibernacji funkcja do tej pory
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();
}
}
Każda tabela jest odwzorowana na klasę modelu. Ważne informacje o klasie są następujące.
Contact.java
Zawiera relację @ManyToOne do klasy ContactType.java
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ContactType contactType;
UserContact.java
zawiera związek @ManyToOne do klasy Contact.java i a @ManyToOne na stronie User.java
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Contact contact;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private User user;
Wszystkie klasy mają standardowe procedury pobierające i ustawiające dla wszystkich atrybutów kolumn dla powyższych tabel również.
Ciągle pojawia się błąd stwierdzający, że nie może on rozwiązać właściwości contact.contactType mojej klasy UserContact. Ktoś wie, jak poprawnie wykonać coś takiego w hibernacji?
Nie można pisać kryteriów (ani HQL) na podstawie tabel. Musisz nam coś powiedzieć o zajęciach. –
Czy wyraził (a) Pan (i) kontakty użytkownika jako encję w swojej aplikacji (wiele do wielu jednokierunkowych przy użyciu tabeli sprzężenia). ? –
@Stefan Steinegger Zaktualizowałem niektóre informacje o klasach – medium