2011-09-13 30 views

Respuesta

6

Primero no extienda (play.db.jpa.Model) Modelo en el modelo que desea generar el Id pero use GenericModel.

entonces podría usar la clase auxiliar que llamó cuando se creó el objeto (en el constructor).

o llamar a la clase de ayuda cuando se guarda (por lo tanto tengo que crear DAO envoltorio, el proceso de almacenamiento se haya hecho en DAO envoltorio no en el objeto de modo que pudiera generar Identificación del guardar el objeto)

o si quiere un enfoque más simple use el UPA de JPA. Vea el código a continuación.

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

GenericModel: is not it a anti pattern? por favor vea: http://en.wikipedia.org/wiki/BaseBean – Kowser

+0

vea el comentario en la wiki y la neutralidad de la wiki que dice "La neutralidad de este artículo está en disputa", llamado este antipatrón en inapropiado. – indrap

+0

sí, ya veo. Necesita estudiar más para aclarar el problema. – Kowser

5

Bueno, la clase Model es solo una subclase de GenericModel que agrega el atributo, los métodos y las anotaciones para proporcionar un Long generado como la propiedad @Id para sus clases de modelo.

Si no lo desea, puede crear una subclase de GenericModel en su lugar y proporcionar su propia @Id. En su caso, eso sería una Cadena para contener el UUID. Sin embargo, tendrá que idear una estrategia para inicializarlo en instancias de modelos nuevos.

No conozco una estrategia incorporada proporcionada por JPA para generar UUID. Un método simple sería tener una clase auxiliar a la que pueda llamar un método para obtener un nuevo UUID y asegurarse de llamarlo cada vez que cree un nuevo modelo.