OpenJPA y EclipseLink crean tablas diferentes para generar valores para atributos que tienen la anotación @GeneratedValue o @GeneratedValue(strategy=GenerationType.AUTO).
Si la aplicación contiene entidades con atributos generados por OpenJPA, persistir nuevas entidades que utilizan EclipseLink genera un error porque EclipseLink intenta generar estos valores a partir de la tabla EclipseLink.
Este problema se resuelve configurando la entidad para utilizar la tabla de secuencia OpenJPA para generar los valores del atributo. Al hacerlo, EclipseLink utiliza el último valor en la tabla OpenJPA para generar el valor del atributo.
Esta regla realiza un examen en búsqueda de atributos que están anotados con @GeneratedValue o
@GeneratedValue(strategy=GenerationType.AUTO).
El arreglo rápido sustituye la anotación @GeneratedValue señalada con las anotaciones siguientes:
@TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")
Por ejemplo, la regla señala la anotación @GeneratedValue en la clase de entidad de acceso de campo siguiente.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class GeneratedValueEntity { @Id @GeneratedValue private int id; } |
El arreglo rápido modifica la anotación @GeneratedValue y añade la anotación @TableGenerator.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class GeneratedValueEntity { @Id @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE") private int id; } |
Si desea más información sobre este problema y otros problemas de migración de OpenJPA a EclipseLink, consulte la guía Migración de OpenJPA a EclipseLink JPA: Correlaciones.