Estoy trabajando en un proyecto que utiliza Hibernate y MySQL. Tengo la intención de utilizar la secuencia para generar el ID para todas las tablas en la base de datos. (Es difícil describir mi pregunta, así que voy a mostrarles como ejemplo).

Por ejemplo: tengo 2 tablas Una & B. en primer lugar, inserte 10 los registros de la tabla a, y sus IDs será de 1 a 10. A continuación, insertar 10 los registros de la tabla B, y quiero su Id serán 11-20, no 1-10. Esto significa que el ID generado valor será contada con todos los registros de todas las tablas de bases de datos, no en una sola tabla.

Entonces, ¿cómo puedo utilizar ese concepto en MySQL? Declarar y la sintaxis?
En modo de Hibernación, ¿cómo puedo utilizar la estrategia y el generador de modelo de datos para aplicar la que genera la estrategia en la base de datos?
Muchas gracias!

OriginalEl autor | 2011-02-16

1 Comentario

  1. 4

    Usted no tiene secuencias en Mysql, pero usted puede usar la ‘TABLA’ id generación

    @javax.persistence.TableGenerator(
        name="EMP_GEN",
        table="GENERATOR_TABLE",
        pkColumnName = "key",
        valueColumnName = "hi"
        pkColumnValue="EMP",
        allocationSize=20
    )
    
    @Entity
    public class Klass {
    
        @Id
        @GeneratedValue(strategy = GenerationType.TABLE, generator=EMP_GEN)
        @Column(name = "ID")
        private Long id;
    }

    Usted puede ser que necesite para añadir el fragmento de @javax.persistence.TableGenerator [...] en todas sus entidades

    Editar

    Muchas gracias. Pero no tenemos otra forma de utilizar ese fragmento sin agregar para cada entidad? Y a la hora de crear tablas en la base de datos, ¿cómo puedo declarar el IDENTIFICADOR de la columna de clave principal para el DBMS para generar de forma automática el valor de eso? – napoleonit76

    Por desgracia, no conozco una manera elegante de hacer esto :(. En mi proyecto, utilizamos la secuencia en varias entidades, y tenemos que declarar la secuencia en cada clase.
    Una cosa que usted podría intentar (pero no me gusta mucho) es crear un super clase para todas sus entidades, y que superclase sólo contiene el IDENTIFICADOR de campo y las anotaciones. Tengo la sensación de que he visto esto en un proyecto, pero no estoy 100% seguro.

    Se trata de decirle a la base de datos a utilizar esa estrategia, yo no creo que sea realmente posible. Usted puede tratar de añadir un disparo y aplicarlo a cada tabla en el esquema. El gatillo se dispara cuando se inserta una nueva fila en la tabla, elegir un valor de la generador de tabla, y agregar a la fila. Sinceramente, no sé si esto podría funcionar, y estoy 99% seguro de que esto no funcionará si usted tiene 2 sesiones simultáneas de la creación de las filas.

    Puede que repensar su estrategia y el uso normal de incremento automático de las columnas para los identificadores y poner el número secuencial en otra columna de las tablas?

    Muchas gracias. Pero no tenemos otra forma de utilizar ese fragmento sin agregar para cada entidad? Y a la hora de crear tablas en la base de datos, ¿cómo puedo declarar el IDENTIFICADOR de la columna de clave principal para el DBMS para generar de forma automática el valor de eso?
    Tengo un problema similar. Está usted dispuesto a que me ayude con ella también? aquí está el enlace: stackoverflow.com/questions/25252541/…
    Evite el uso de GenerationType.TABLE porque implica pesimista cerraduras para generar valores únicos. Sin embargo, Si usted todavía desea utilizar, a continuación, utilizar también algunas técnicas de optimización (por ejemplo,pooled) para reducir el adicional de consultas de base de datos. Uso GenerationType.IDENTITY lugar.

    OriginalEl autor Augusto

Dejar respuesta

Please enter your comment!
Please enter your name here