OpenJPA は、org.apache.openjpa.persistence.PersistentCollection のアノテーションが付けられているコレクション属性に別個の表を作成します。EclipseLink で同じ動作になるようにするには、JPA 仕様の定義に従って、これらのアノテーションを @ElementCollection および @Column アノテーションに置き換えます。@PersistentCollection アノテーションを削除したが @ElementCollection および @Column アノテーションを追加しなかった場合、EclipseLink はフィールドを BLOB として扱い、エンティティーの表にデータの列を作成しようとします。
この規則は org.apache.openjpa.persistence.PersistentCollection アノテーションがないかをスキャンし、手動でマイグレーションできるようにします。
アノテーションをマイグレーションするには、以下のステップを実行します。
@org.apache.openjpa.persistence.PersistentCollection アノテーションを以下に置き換えます。
@javax.persistence.ElementCollection @javax.persistence.Column(name="element")属性に
@Column アノテーションが既に付けられている場合は、新たにアノテーションを追加するのではなく、名前を変更してください。
例えば、この規則により、以下のエンティティー・クラスの @PersistentCollection アノテーションにフラグを立てます。
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; } |
このエンティティーをマイグレーションするには、アノテーションを置き換え、int 配列を 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; } |
この OpenJPA から EclipseLink へのマイグレーションの問題については、 Migration from OpenJPA to EclipseLink JPA: Extended Functionality ガイドを参照してください。