Atributos com valores gerados automaticamente requerem configuração

O OpenJPA e o EclipseLink criam diferentes tabelas para gerar valores para atributos que possuem a anotação @GeneratedValue ou @GeneratedValue(strategy=GenerationType.AUTO). Se o seu aplicativo contém entidades com atributos que foram gerados pelo OpenJPA, persistir novas entidades usando o EclipseLink causa um erro porque o EclipseLink tenta gerar estes valores a partir da tabela EclipseLink.

Este problema é resolvido ao configurar a entidade para usar a tabela de sequências OpenJPA para gerar os valores do atributo. Ao fazer isso, o EclipseLink usa o último valor listado na tabela OpenJPA para gerar o valor do atributo.

Esta regra faz a varredura para encontrar atributos que não estão anotados com @GeneratedValue ou @GeneratedValue(strategy=GenerationType.AUTO). Será fornecida uma automatização onde ela substituirá o sinalizador @GeneratedValue com as seguintes anotações:

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

Por exemplo, a regra sinaliza a anotação @GeneratedValue na classe de entidade de acesso ao campo a seguir.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
classe pública GeneratedValueEntidade {

    @Id @GeneratedValue private int id;}

A correção automatizada modificará a anotação @GeneratedValue e adiciona a anotação @TableGenerator anotação.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
classe pública GeneratedValueEntidade {

    @Id
    @TableGenerator(nome = "OPENJPA_SEQUENCE_TABLE", tabela = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(estratégia = GenerationType.TABLE, gerador = "OPENJPA_SEQUENCE_TABLE")
    ID private int ;}

Para obter informações sobre esse problema e outros problemas de migração do OpenJPA para o EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: mapeamentos.