Az automatikusan előállított értékekkel rendelkező attribútumokat be kell állítani

Az OpenJPA és az EclipseLink különböző táblákat hoznak létre a @GeneratedValue vagy a @GeneratedValue(strategy=GenerationType.AUTO) annotációval rendelkező attribútumok értékeinek előállításához. Ha az alkalmazás tartalmaz ilyen, az OpenJPA által előállított attribútumokkal rendelkező egyedeket, akkor az új egyedek tárolása az EclipseLink használatával hibát okoz, mert az EclipseLink az EclipseLink táblából próbálja meg előállítani ezeket az értékeket.

A probléma megoldásához konfigurálja az egyedet, hogy az OpenJPA szekvencia táblát használja az attribútum értékeinek előállításához. Ha így tesz, akkor az EclipseLink az OpenJPA táblában felsorolt utolsó értéket fogja használni az attribútumérték előállításához.

Ez a szabály megkeresi a @GeneratedValue vagy a @GeneratedValue(strategy=GenerationType.AUTO) annotációval ellátott attribútumokat. Automatizált lesz, ahol a megjelölt helyettesítheti a @GeneratedValue megjegyzést a következő megjegyzésekkel helyettesíti:

  @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0")
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")

Például a szabály megjelöli a következő mező hozzáférési egyedosztályban lévő @GeneratedValue annotációt.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
nyilvános osztály GeneratedValueegyed {

    @Id @GeneratedValue privát int id;}

Az automatikus javítás módosítja a @GeneratedValue megjegyzést, és hozzáadja a @TableGenerator megjegyzést.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
nyilvános osztály GeneratedValueegyed {

    @Id
    @TableGenerator(név = "OPENJPA_SEQUENCE_TABLE", tábla = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(stratégia = GenerationType.TABLE, előállító = "OPENJPA_SEQUENCE_TABLE")
    privát int id;}

A problémával és más OpenJPA - EclipseLink átállítási problémákkal kapcsolatos információkért tekintse meg az OpenJPA - EclipseLink JPA átállítás: Leképezések útmutatót.