2011-09-13 19 views

risposta

6

Innanzitutto non estendere (play.db.jpa.Model) Modello nel modello a cui si desidera generare l'ID ma utilizzare GenericModel.

quindi è possibile utilizzare la classe helper che ha chiamato quando viene creato l'oggetto (nel costruttore).

o chiamare la classe di supporto quando viene salvato (quindi devo creare involucro DAO, il processo di salvataggio viene fatto in involucro DAO non in oggetto in modo che ho potuto generare id salvare l'oggetto)

o se si vuoi un approccio più semplice usa l'UUID JPA. Vedi il codice qui sotto.

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

GenericModel: non è un pattern anti? per favore vedi: http://en.wikipedia.org/wiki/BaseBean – Kowser

+0

vedi il commento sulla wiki e la neutralità della wiki che dice "La neutralità di questo articolo è contestata", così chiamato questo anti-pattern in inappropriato. – indrap

+0

sì, vedo così. Hai bisogno di studiare di più per chiarire il problema. – Kowser

5

Bene, la classe Model è solo una sottoclasse di GenericModel che aggiunge l'attributo, i metodi e le annotazioni per fornire un Long generato come proprietà @Id per le classi del modello.

Se non si desidera ciò, è possibile creare sottoclasse GenericModel e fornire il proprio ID personale. Nel tuo caso quella sarebbe una stringa per contenere l'UUID. Tuttavia, dovrai trovare una strategia per inizializzarla su nuove istanze di modelli.

Non sono a conoscenza di una strategia integrata fornita da JPA per generare UUID. Un metodo semplice consiste nell'avere una classe helper su cui è possibile chiamare un metodo per ottenere un nuovo UUID e assicurarsi di chiamarlo ogni volta che si crea un nuovo modello.