2010-12-14 8 views
5

Czy funkcja Hibernate ma interfejs API do odczytywania wartości pola tożsamości jednostki? W moim przypadku byłaby to wartość Serializable zwracana przez pole z adnotacją @Id. Na przykład, załóżmy, że miałem Person podmiot:Odczyt wartość tożsamości elementu hibernacji

class Person { 
    @Id private long id; 
    // ... other fields, getters/setters, etc ... 
} 

Person p = new Person(); 
p.setId(42L); 

Hibernate.unknownFunction(p); // returns 42L 

Pewnie mógłbym odczytać adnotacje, aby znaleźć dziedzinie @Id siebie, ale wydaje się to coś, co może być zbudowany w

Odpowiedz

2

session.getIdentifier(object)

Powrót wartość identyfikator danego podmiotu jako związane z tą sesją. Wyjątek jest generowany, jeśli dana instancja obiektu jest przejściowa lub odłączona w stosunku do tej sesji.

Obiekt musi mieć identyfikator i być skojarzony z bieżącą sesją, w przeciwnym razie zostanie zgłoszony wyjątek. Ale myślę, że to logiczne.

0

nie mogę powiedzieć. 100% nie - ale naprawdę wątpię, ponieważ nie wszystkie encje są opatrzone przypisami z @Id; istnieją inne warianty, które mogą być używane, takie jak @EmbeddedId. Biorąc pod uwagę to, czy nie możesz po prostu użyć odbicia, aby uzyskać wartość swojego identyfikatora?

2

Cóż, jeśli potrzebujesz metody zwracającej identyfikator w dowolnych klasach, zaprojektuj interfejs, aby to spełnić. na przykład:

public interface IdHolder { 
    Integer getId(); 
} 

Za pomocą takiego interfejsu można wprowadzić pewne metody użytkowe, aby pobrać identyfikator z dowolnych klas.

cglib to solidny, ale nieco trudny sposób na zrobienie tego.

Powiązane problemy