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). A correção rápida substitui a anotação @GeneratedValue sinalizada pelas anotações a seguir:

  @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
public class GeneratedValueEntity {

    @Id
    @GeneratedValue
    private int id;

}

A correção rápida modifica a anotação @GeneratedValue e inclui a anotação @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;
}

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.