Tengo una clase con la siguiente definición:

@Id
@SequenceGenerator(name = "SEQ_ACE_WORKERS_QUEUE_STATS_ID", sequenceName = "SEQ_ACE_WORKERS_QUEUE_STATS_ID", allocationSize = 500)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ACE_WORKERS_QUEUE_STATS_ID")
@Column(name = "ID")
private long Id;

Cuando nos encontramos en Jboss 4.2.3 funcionó bien y generó la IDENTIFICACIÓN correcta (a partir de 1000+)

Ahora nos mudamos a jboss 7.1.1 y genera negativo ID! (a partir de -498 y subiendo)

Alguna idea de por qué puede suceder?

  • ¿has comprobado lo que es la corriente de secuencia en Oracle y seguimiento de hibernación de salida, si usted ve adecuado seleccione siguiente secuencia consulta y si de copiar y pegar en sqlplus correcta/la misma/resultado esperado?
InformationsquelleAutor Tomer | 2012-03-25

3 Comentarios

  1. 33

    Sólo me encontré con este problema al migrar de JBoss 6.1 a JBoss 7.1.

    De acuerdo a la JBoss as 7.1 JPA documentación ( https://docs.jboss.org/author/display/AS71/JPA+Reference+Guide#JPAReferenceGuide-Persistenceunitproperties),

    JBoss 7.1 establece automáticamente varias propiedades de hibernate. Una de las propiedades que se establece es hibernate.id.new_generator_mappings que activa la nueva IDENTIFICACIÓN de los generadores que utilizan diferentes algoritmos y no son compatibles. Al establecer esta propiedad en false en el persistence.xml archivo de restaurar el viejo de IDENTIFICACIÓN de generador de comportamiento.

    La hibernación 4 documentación también tiene información acerca de la nueva IDENTIFICACIÓN de los generadores: http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html_single/#mapping-declaration-id-generator.

    La documentación de hibernate establece claramente que el nuevo ID de los generadores no están habilitadas por defecto, pero, como se señaló anteriormente, JBoss 7.1 automáticamente la habilitación de ellos.

    • Gracias por la respuesta, ya he conseguido encontrarlo, se olvidó de actualizar aquí 🙁
    • Comenzando con Hibernate versión 5.0, el hibernate.id.new_generator_mappings valores predeterminados de las propiedades a true. Consulte docs.jboss.org/hibernate/orm/5.2/userguide/html_single/…
  2. 66

    El nuevo comportamiento es el siguiente:

    AllocationSize es un rango de valores de clave principal reservada para Hibernar.
    Y la seleccione seq.nextval de doble sólo se hará después de la hibernación consumido esta gama de claves primarias.

    Para que debe declarar el mismo valor en ambos allocationSize (Hibernate) y la secuencia increment by (DB)

    Cuando se establece explícitamente allocationSize=500, por ejemplo, en Oracle

    create sequence SEQ_ACE_WORKERS_QUEUE_STATS_ID
           MINVALUE 1 
           MAXVALUE 999999999999999999999999999 
           START WITH 1
           INCREMENT BY 500 
           NOCACHE 
           NOCYCLE;

    De lo contrario, te darás cuenta de valores negativos o restricción de los errores generados a partir de su DB debido a la clave principal de las colisiones.

    Cuando el servidor de la aplicación se reinicia, te darás cuenta de que el «salto» entre la última clave primaria asignada, y el ‘recién’ número de secuencia seleccionada en reiniciar.

    Comentario Final: el valor por defecto es de 50. Así que si usted no especifica allocationSize en la Hibernación lado, usted debe declarar increment by 50 sobre la base de datos secundarios.

    • Muy útil la respuesta, pues esta información al parecer no está en el modo Hibernación docs.
  3. 22

    Configuración hibernate.id.new_generator_mappings a false en mi persistence.xml fue sólo la primera parte de la solución a mi problema:

    Para resolver por completo el problema que he añadido la allocationSize a 1 en el @SequenceGenerator (que estaba omitiendo).

    • pero, ¿por qué tienes que añadir tanto? ¿Qué parte de la new_generator_mappings además de la allocationSize cambio dio un problema que se resuelve mediante el establecimiento a falso?
    • Parámetro a false, sólo funcionó después de establecer allocationSize

Dejar respuesta

Please enter your comment!
Please enter your name here