2011-09-18 10 views
9

Estoy tratando de crear una forma personalizada de computación y pasar identificadores únicos que siguen mi propio patrón.¿JPA tiene algo así como hiberna "@GenericGenerator" para generar identificadores personalizados?

Hibernate tiene la anotación @GenericGenerator que le permite asignar una clase personalizada para calcular una identificación única y asignarla de nuevo a la columna @Id.

ejemplo

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

La cosa es que yo no quiero usar (hiberna) @GenericGenerator a nivel de paquete. ¿Puede ser esto en JPA/2 "puro"?

Gracias por su tiempo.

Respuesta

14

No, no tiene. La única posibilidad sin terceros es asignar valor usted mismo. Si desea evitar el método de llamada que establece el ID, entonces, por ejemplo, se puede usar la devolución de llamada Prepersist.

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

Solución muy elegante. ¿Está realmente permitido? la especificación es ambigua cuando dice: En general, el método del ciclo de vida de una aplicación portátil no debe invocar EntityManager ni realizar operaciones de consulta, acceder a otras instancias de entidad o modificar relaciones dentro del mismo contexto de persistencia [46]. [47] Un método de devolución de llamada del ciclo de vida puede modificar el estado sin relación de la entidad en la que se invoca. –

Cuestiones relacionadas