2011-09-13 20 views

Odpowiedz

6

Najpierw nie rozszerzaj modelu (play.db.jpa.Model) w Modelu, który chcesz wygenerować Id, ale użyj GenericModel.

następnie można użyć klasy pomocniczej, która wywołana, gdy obiekt jest tworzony (w konstruktorze).

lub zadzwonić do klasy pomocnika podczas zapisywania (zatem muszę utworzyć otoki DAO, proces zapisać odbywa się w otoki DAO nie w obiekcie tak, że może generować id zapisać obiekt)

lub jeśli chcesz bardziej proste podejście używać JPU UUID. Zobacz kod poniżej.

@Entity 
public class User extends GenericModel { 
    @Id 
    @GeneratedValue(generator = "system-uuid") 
    @GenericGenerator(name = "system-uuid", strategy = "uuid") 
    public String id; 
} 
+0

GenericModel: czy to nie jest anty wzorzec? zobacz: http://en.wikipedia.org/wiki/BaseBean – Kowser

+0

zobacz komentarz na wiki i neutralność wiki, która mówi: "Neutralność tego artykułu jest kwestionowana", tak zwany ten anty-wzór jest niewłaściwy. – indrap

+0

tak, widzę tak. Trzeba uczyć się więcej, aby wyjaśnić problem. – Kowser

5

Cóż, klasa Model jest tylko podklasą GenericModel, która dodaje atrybut, metody i adnotacje, aby zapewnić wygenerowaną wartość Long jako właściwość @Id dla klas modelu.

Jeśli nie chcesz tego, możesz zamiast tego podklasy GenericModel i podać własny @ID. W twoim przypadku byłby to ciąg do przechowywania UUID. Musisz jednak wymyślić strategię inicjowania go w nowych instancjach modelu.

Nie jestem świadomy wbudowanej strategii dostarczonej przez JPA do generowania identyfikatorów UUID. Prostą metodą byłoby posiadanie klasy pomocniczej, do której można wywołać metodę, aby uzyskać nowy identyfikator UUID i upewnić się, że wywołasz ją za każdym razem, gdy tworzysz nowy model.

Powiązane problemy