OpenJPA und EclipseLink erstellen unterschiedliche Tabellen, um Werte für Attribute mit
der Annotation @GeneratedValue oder der Annotation @GeneratedValue(strategy=GenerationType.AUTO) zu generieren.
Wenn Ihre Anwendung Entitäten mit Attributen enthält, die von
OpenJPA generiert wurden, tritt beim persistenten Speichern neuer Entitäten mit EclipseLink ein Fehler auf, weil
EclipseLink versucht, diese Werte anhand der EclipseLink-Tabelle zu generieren.
Sie können dieses Problem beheben, indem Sie die Entität so konfigurieren, dass die OpenJPA-Sortiertabelle für die Generierung der Attributwerte verwendet wird. Daraufhin verwendet EclipseLink den letzten in der OpenJPA-Tabelle aufgelisteten Wert, um den Attributwert zu generieren.
Diese Regel sucht nach Attributen, die mit @GeneratedValue oder
@GeneratedValue(strategy=GenerationType.AUTO) annotiert sind.
Die Schnellkorrektur ersetzt die markierte Annotation @GeneratedValue
durch die folgenden Annotationen:
@TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")
Die Regel markiert beispielsweise die Annotation @GeneratedValue in der folgenden Entitätsklasse für Feldzugriffe.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class GeneratedValueEntity { @Id @GeneratedValue private int id; } |
Die Schnellkorrektur ändert die Annotation @GeneratedValue und fügt die Annotation @TableGenerator hinzu.
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; } |
Informationen zu diesem Problem und zu weiteren Problemen bei der Migration von OpenJPA auf EclipseLink finden Sie in der Veröffentlichung OpenJPA to EclipseLink JPA Migration: Mappings.