Interfejs OpenJPA tworzy oddzielną tabelę dla atrybutów kolekcji, które mają adnotację org.apache.openjpa.persistence.PersistentCollection. Aby działanie było takie samo w środowisku EclipseLink, należy zastąpić te adnotacje adnotacjami @ElementCollection i @Column zgodnie z definicją w specyfikacji JPA. Jeśli adnotacja @PersistentCollection zostanie usunięta i nie zostaną dodane adnotacje @ElementCollection ani @Column, interfejs EclipseLink będzie traktować pole jako pole typu BLOB i spróbuje utworzyć kolumnę dla danych w tabeli jednostek.
Ta reguła skanuje adnotacje org.apache.openjpa.persistence.PersistentCollection, umożliwiając ręczne przeprowadzenie ich migracji.
Aby przeprowadzić migrację adnotacji, wykonaj następujące kroki:
@org.apache.openjpa.persistence.PersistentCollection kodem
@javax.persistence.ElementCollection @javax.persistence.Column(name="element")Jeśli istnieje już adnotacja
@Column dla atrybutu, nie dodawaj kolejnej ani nie zmieniaj nazwy.
Na przykład reguła ta powoduje oznaczenie adnotacji @PersistentCollection w następującej klasie jednostki:
import javax.persistence.Entity; import javax.persistence.Id; import org.apache.openjpa.persistence.PersistentCollection; @Entity public class IntArrayEntity{ @Id private int id; @PersistentCollection private int[] arrayOfInts; } |
Aby przeprowadzić migrację tej jednostki, należy zastąpić adnotację i zmienić tablicę int w listę obiektów Integer: List<Integer>.
import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class IntArrayEntity{ @Id private int id; @ElementCollection @Column(name="element") private List<Integer> arrayOfInts; } |
Informacje na temat tego problemu z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja z interfejsu JPA OpenJPA do EclipseLink: Funkcje rozszerzone.