Cserélje le az OpenJPA @PersistentCollection annotációt @ElementCollection és @Column annotációra

Az OpenJPA egy külön táblát hoz létre a gyűjtemény attribútumoknak, amelyek meg vannak jelölve az org.apache.openjpa.persistence.PersistentCollection annotációval. Az azonos viselkedés eléréséhez az EclipseLink megvalósításban, cserélje le ezeket az annotációkat a JPA specifikációban meghatározott @ElementCollection és @Column annotációkra. Ha eltávolítja a @PersistentCollection annotációt és nem adja hozzá az @ElementCollection és @Column annotációt, akkor az EclipseLink a mezőt BLOB mezőként kezeli, és megpróbál létrehozni az adatok számára egy oszlopot az egyed táblájában.

Ez a szabály megkeresi az org.apache.openjpa.persistence.PersistentCollection annotációkat, hogy kézzel átállíthassa azokat. Az annotációk átállításához tegye a következőket:

  1. Cserélje le az @org.apache.openjpa.persistence.PersistentCollection annotációt a következőre:
    @javax.persistence.ElementCollection
    @javax.persistence.Column(name="element")
    
    Ha az attribútumhoz már meg van adva egy @Column annotáció, akkor ne adjon hozzá egy másikat és ne módosítsa a nevet.
  2. Módosítsa a tömböket objektumok gyűjteményeire. Primitívek helyett használjon primitív csomagoló típusokat.

Például ez a szabály megjelöli a @PersistentCollection annotációt a következő Entity osztályban:


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;

}

Az egyed átállításához cserélje le az annotációt, és módosítsa az int tömböt Integer objektumok listájára: 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;
}

További információkért ezzel az OpenJPA - EclipseLink átállítási problémával kapcsolatban, tekintse meg az OpenJPA - EclipseLink áttérés: Kibővített funkcionalitás útmutatót.