Zastąp adnotację @PersistentCollection środowiska OpenJPA adnotacjami @ElementCollection i @Column

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:

  1. Zastąp adnotację @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.
  2. Zmień tablice na kolekcje obiektów. Użyj podstawowych typów opakowania zamiast typów podstawowych.

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.