Interfejsy OpenJPA i EclipseLink tworzą różne tabele w celu generowania wartości dla atrybutów, które mają adnotację @GeneratedValue lub @GeneratedValue(strategy=GenerationType.AUTO).
Jeśli aplikacja zawiera obiekty z atrybutami wygenerowanymi przez interfejs OpenJPA, utrwalanie nowych obiektów za pomocą interfejsu EclipseLink powoduje wystąpienie błędu, ponieważ interfejs EclipseLink podejmuje próbę wygenerowania tych wartości z tabeli EclipseLink.
Ten problem rozwiązuje się przez skonfigurowanie użycia przez jednostkę tabeli sekwencji OpenJPA do generowania wartości atrybutu. Dzięki temu w celu wygenerowania wartości atrybutu interfejs EclipseLink używa ostatniej wartości wymienionej w tabeli OpenJPA.
Ta reguła wykonuje skanowanie w poszukiwaniu atrybutów z adnotacjami @GeneratedValue lub @GeneratedValue(strategy=GenerationType.AUTO).
Zautomatyzowany zostanie dostarczony tam, gdzie zastąpi oflagowane @GeneratedValue następującymi adnotacjami:
@TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")
Na przykład reguła oznacza adnotację @GeneratedValue w następującej klasie jednostki dostępu do pola.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity klasa publiczna GeneratedValueEntity { @Id @GeneratedValue private int id; }
Automatyczna poprawka zmodyfikuje adnotację @GeneratedValue i doda adnotację @TableGenerator adnotację.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity klasa publiczna 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; }
Informacje na ten temat oraz na temat innych problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.