Hibernate query a foreign key field with ID
Na przykład, mam dwa podmioty: pracownika i adres. Spośród tych elementów pracownik ma adres klucza obcego, który odwołuje się do kolumny ID na adresie. W obiektach domeny Java Hibernate ładnie otacza pole liczb całkowitych klucza fałsz z polem obiektu adresu. Ale jak mógłbym zapytać pracownika o konkretny adres?
Próbowałem utworzyć alias tabeli. To chyba działa, ale jest dość niezręczne.
Próbowałem też zrobić coś takiego:
criteria.add(restriction.eq("TheAddressObjectFieldName", 123);
To działa jakiś czas, ale nie zawsze. Nie jestem pewien, czy to jest właściwa droga, ale miałem nadzieję, że może cały czas.
Jaki jest więc właściwy sposób odpytywania kolumny klucza obcego w hibernate?
2 answers
Hibernate "ładnie owija" tylko to, co każesz owijać. Zakładając więc, że Twoje Employee
mapowanie wygląda mniej więcej tak:
@Entity
public class Employee {
...
@ManyToOne
@JoinColumn(name="address_id")
private Address address;
...
}
A twoje Address
ma właściwość id
, możesz odpytywać na podstawie address_id
poprzez:
session.createCriteria(Employee.class)
.add(Restrictions.eq("address.id", addressId));
W celu zapytania na podstawie właściwości Address
, musisz utworzyć aliasy lub zagnieżdżone kryteria:
session.createCriteria(Employee.class)
.createAlias("address", "a")
.add(Restrictions.eq("a.postalCode", postalCode));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 01:04:36
Mam podobne problemy... @ChssPly76 odpowiedź działa dobrze, ale właśnie znalazłem rozwiązanie jeśli klucz obcy nie jest częścią Id w tabeli nadrzędnej - musisz zmodyfikować adnotację dodając "referencedColumnName":
@ManyToOne
@JoinColumn(name="address_id", referencedColumnName="addrUniqueFieldName")
private Address address;
I wtedy możesz utworzyć kryteria:
criteria.add(restriction.eq("address.addrUniqueFieldName", 123);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 17:17:02