2011-09-18 10 views
9

Próbuję stworzyć niestandardowy sposób obliczania i przekazywania unikalnych identyfikatorów, które będą zgodne z moim własnym wzorcem.Czy JPA ma coś takiego jak hibernaty @GenericGenerator do generowania niestandardowych identyfikatorów?

Hibernate ma adnotację @GenericGenerator, która pozwala mapować klasę niestandardową do obliczania unikalnego identyfikatora i przypisywania go do kolumny @Id.

przykład

@Id 
    @GeneratedValue(generator="MyIdGenerator") 
    @GenericGenerator(name="MyIdGenerator", strategy="com.test.MyIdGenerator") 

Chodzi o to, że nie chcę użyć (Hibernacja) @GenericGenerator na poziomie pakietu. Czy może to być "czysty" WZP/2?

Dzięki za poświęcony czas.

Odpowiedz

14

Nie, nie ma. Jedyną możliwością bez osoby trzeciej jest przypisanie wartości przez siebie. Jeśli chcesz zapisać się od metody wywołującej, która ustawia identyfikator, możesz na przykład użyć wywołania zwrotnego Prepersist.

@PrePersist 
    public void ensureId() { 
    id = ... 
    } 
+1

Bardzo eleganckie rozwiązanie. Czy to naprawdę dozwolone? specyfikacja jest niejednoznaczna, gdy stwierdza: Zasadniczo, metoda cyklu życia aplikacji przenośnej nie powinna wywoływać EntityManager lub operacji kwerendy, dostępu do innych instancji encji lub modyfikowania relacji w ramach tego samego kontekstu trwałości [46]. [47] Metoda wywołania zwrotnego cyklu życia może modyfikować stan braku związku stanu encji, w której jest wywoływany. –