자동으로 생성된 값이 있는 속성에 구성이 필요

OpenJPA 및 EclipseLink는 서로 다른 테이블을 작성하여 @GeneratedValue 또는 @GeneratedValue(strategy=GenerationType.AUTO) 어노테이션이 있는 속성에 대한 값을 생성합니다. 애플리케이션에 OpenJPA에서 생성한 속성이 있는 엔티티가 포함된 경우 EclipseLink를 사용하여 새 엔티티를 지속하면 EclipseLink가 EclipseLink 테이블에서 이러한 값을 생성하려고 하므로 오류가 발생합니다.

이 문제점은 OpenJPA 시퀀스 테이블을 사용하도록 엔티티를 구성하여 속성 값을 생성함으로써 해결됩니다. 그렇게 하여 EclipseLink에서 OpenJPA 테이블에 나열된 마지막 값을 사용하여 속성 값을 생성합니다.

이 규칙은 @GeneratedValue 또는 @GeneratedValue(strategy=GenerationType.AUTO) 어노테이션이 있는 속성에 대해 스캔합니다. 자동화된 기능이 제공되어 플래그가 지정된 @GeneratedValue 어노테이션을 다음 어노테이션으로 대체하는 자동화된 기능이 제공됩니다:

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

예를 들어 규칙은 다음 필드 액세스 엔티티 클래스에서 @GeneratedValue 어노테이션에 플래그를 지정합니다.

가져오기 javax.persistence.Entity;
가져오기 javax.persistence.GeneratedValue;
가져오기 javax.persistence.Id;

@Entity
공용 클래스 GeneratedValueEntity {

    @Id @GeneratedValue 개인용 int id;}

자동화된 수정은 @GeneratedValue 어노테이션을 수정하고 @TableGenerator 어노테이션을 추가합니다.

가져오기 javax.persistence.Entity;
가져오기 javax.persistence.GeneratedValue;
가져오기 javax.persistence.Id;

@Entity
공용 클래스 GeneratedValueEntity {

    @Id
    @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")
    개인용 int ID;}

이 문제 및 기타 OpenJPA에서 EclipseLink로의 마이그레이션 문제에 대한 정보는 OpenJPA에서 EclipseLink JPA로 마이그레이션: 맵핑 안내서를 참조하십시오.