Chciałbym używać UUID zamiast zwykłego identyfikatora na moich modeli.UUID ze strukturą Play
Czy można to zrobić za pomocą schematu gry?
Chciałbym używać UUID zamiast zwykłego identyfikatora na moich modeli.UUID ze strukturą Play
Czy można to zrobić za pomocą schematu gry?
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;
}
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.
GenericModel: czy to nie jest anty wzorzec? zobacz: http://en.wikipedia.org/wiki/BaseBean – Kowser
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
tak, widzę tak. Trzeba uczyć się więcej, aby wyjaśnić problem. – Kowser