2008-09-18 15 views
11

Es posible omitir @GeneratedValue para una identificación en Hibernate, tenemos un caso en el que la mayoría de las veces queremos que la ID se establezca usando GeneratedValue, pero en ciertos casos nos gustaría configurar la ID manualmente .Bypass GeneratedValue en Hibernate

¿Es esto posible?

Respuesta

5

Sé que puede hacer esto en la especificación JPA, por lo que debería ser capaz de hacerlo en Hibernate (usando anotaciones JPA +).

Si solo completa el campo ID del nuevo modelo persistente que está creando, cuando "Combine" ese modelo en el EntityManager, usará la ID que haya configurado.

Esto tiene ramificaciones, sin embargo. Acabas de utilizar esa ID, pero la secuencia especificada por la anotación GeneratedValue no lo sabe. A menos que especifique una ID sin usar que sea MENOS que el valor actual de la secuencia, obtendrá un problema una vez que la secuencia alcance el valor que acaba de usar.

Por lo tanto, tal vez pueda ver dónde desea que el usuario pueda especificar una identificación, pero luego debe detectar la posible excepción (identificación duplicada) que pueda presentarse en el futuro.

+0

En mi caso, no habría duplicados, ya que la ID se generaría a partir de la misma secuencia en ambos casos, solo en diferentes puntos de la transacción. –

+1

Tengo una duda al respecto, vea preguntas como http://stackoverflow.com/questions/3194721/bypass-generatedvalue-in-hibernate-merge-data-not-in-db y http://stackoverflow.com/questions/2108178/id-generatedvalue-but-set-own-id-value. –

+2

No creo que esto sea correcto tampoco. Ciertamente no funciona en Hibernate y también tengo dudas de que esto funcione con la mayoría de los proveedores de JPA. – cyberoblivion

Cuestiones relacionadas