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 어노테이션에 플래그를 지정합니다.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class GeneratedValueEntity { @Id @GeneratedValue private int id; } |
빠른 수정사항은 @GeneratedValue 어노테이션을 수정하고 @TableGenerator 어노테이션을
추가합니다.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class 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") private int id; } |
이 문제 및 기타 OpenJPA에서 EclipseLink로의 마이그레이션 문제에 대한 정보는 OpenJPA에서 EclipseLink JPA로 마이그레이션: 맵핑 안내서를 참조하십시오.