Estoy tratando de implementar algunas entidades básicas usando Hibernate/JPA. Inicialmente, el código se implementó en MySQL y funcionaba bien. Ahora, lo estoy transfiriendo para usar PostgreSQL. En MySQL, mi clase de entidad define su clave primaria como un valor a largo incremento automático con la siguiente sintaxis:Hibernate/JPA y PostgreSQL: ¿clave principal?
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
Sin embargo, he descubierto que tengo errores con PostgreSQL cuando trato y de colocar varios registros en una hora. ¿Con qué debo anotar mi clave principal para obtener el mismo comportamiento de incremento automático en PostgreSQL que con MySQL? ¡Gracias por cualquier ayuda que usted nos pueda proporcionar!
GenerationType.AUTO no debería causar un problema con ninguna base de datos. ¿Puedes publicar la excepción y/o tu código de inserción? Vale la pena señalar que en MySQL, GenerationType.AUTO se convierte en el tipo de incremento, mientras que en PostgreSQL, utiliza la secuencia de forma predeterminada. Consulte el documento aquí http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-declaration-id para obtener una descripción – ig0774
Lo intentaré una vez más y luego publicaré el excepción que estoy recibiendo. La forma en que tengo configurada mi clase de entidad es tener una clase base abstracta con la identificación definida y la anotación @MappedSuperclass en ella, y luego derivar el resto de mis entidades desde allí. ¿Crees que eso creará un problema en PostgreSQL? – Shadowman
¿Está insertando con JPA 'persist()' y 'merge()' o SQL directo? 'GenerationType.AUTO' significa que" el proveedor de persistencia debe elegir una estrategia adecuada "(Versión final de JPA 2.0, Sección 11.1.17). No implica necesariamente una relación de secuencia. Solo 'GenerationType.SEQUENCE' obliga al proveedor de JPA a usar una secuencia. La pregunta es actualmente demasiado vaga para estar seguro, pero tal vez Hibernate decidió generar 'id' con una tabla en Postgres y quizás esté ejecutando SQL esperando un valor de secuencia predeterminado inexistente para la columna' id'. Por favor, muestre las relaciones de Postgres (psql's '\ d'). –