2012-06-01 15 views
7

Estoy usando este código en Hibernate.Hibernate Generated Value strategy

@Id @GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name="RightID", unique=true, nullable=false) 

El problema es que cuando elimino una fila, el "IDIno" no permanece en secuencia. Quiero algo así como, hibernates debería verificar id, si falta algún valor de id debe darle ese valor a 'RightsId', de lo contrario proceda normalmente

Respuesta

4

Base de datos no importa si hay agujeros en la secuencia. También, en general, es posible y muy probablemente sea más fácil cambiar el diseño de la aplicación, de modo que no se espera que la lista de valores de identificación no contenga agujeros.

Si alguna razón extraña obliga a tal diseño, debe usar un generador personalizado. Los detalles de implementación se pueden encontrar a través de esta pregunta: Hibernate ID Generator

9

No creo que haya ningún optio disponible en hibernación. En lugar de AUTO, puede probar las siguientes opciones de estrategia también:

  1. GenerationType.TABLE - el proveedor de persistencia utiliza una tabla de base de datos para la gestión de claves.

  2. GenerationType.SEQUENCE - el proveedor de persistencia utiliza una secuencia de bases de datos para la generación de claves. La base de datos debe admitir las Secuencias

  3. GenerationType.IDENTITY - el proveedor de persistencia se remite a la base de datos para la generación de claves. La base de datos debe admitir el tipo de columna IDENTIDAD.

Otro punto: es posible que no hayan proporcionado esta opción porque también ralentizará el rendimiento. Para cada inserción, tendrá que buscar en toda la columna ID. Puedes imaginar cuánto impactará en el rendimiento.

0

La razón principal por la que esto no es compatible internamente es security. te voy a dar un ejemplo,

1. Seguridad

Tenemos una base de datos para SimCards móviles que tiene el número de identificación único. Si tu sim se pierde y luego lo desactivaste. Pero digamos que otro usuario compró un nuevo simulador y ese simulador recibió el número único anterior que tenía su simulador (según su lógica). Entonces podría conducir a un problema. Como digamos que el nuevo usuario hizo algún acto terrorista, la policía va a rastrear ese número sim y puede que venga a usted. (Como era un usuario nuevo y algunos en lugares SIM todavía muestra su nombre) ...

2 latencia

Y definitivamente el rendimiento problema está ahí. Cada búsqueda para encontrar el número de secuencia no utilizado será O (n) en lugar de simple O (1).