Eclipselink atualizar tabelas existentes

Talvez eu tenha entendido errado, mas eu acho que o JPA foi capaz de atualizar uma tabela existente (modelo alterado adicionando uma coluna), mas não está funcionando no meu caso.

Eu posso ver nos logs eclipselink tentando criá-lo, mas não porque já existe. Em vez de tentar uma atualização para adicionar a coluna continua.

       

E aqui está a tabela com a mudança (coluna online adicionada)

 [EL Warning]: 2010-05-31 14: 39: 06.044 - ServerSession (16053322) - Exceção [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100517-r7246): org.eclipse.persistence.exceptions .DatabaseException
 Exceção Interna: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: A tabela 'account' já existe
 Código de erro: 1050
 Chamada: Conta CREATE TABLE (ID INTEGER NOT NULL, USERNAME VARCHAR (32) NOT NULL, SECURITY_KEY VARCHAR (255) NOT NULL, EMAIL VARCHAR (64) NOT NULL, STATUS VARCHAR (8) NOT NULL, TIMEDATE DATETIME NÃO NULL, PASSWORD VARCHAR (255) NOT NULL, ONLINE TINYINT (1) padrão 0 NOT NULL, PRIMARY KEY (ID))
 Consulta: DataModifyQuery (sql = "Conta CREATE TABLE (ID INTEGER NOT NULL, USERNAME VARCHAR (32) NOT NULL, SECURITY_KEY VARCHAR (255) NOT NULL, E-MAIL VARCHAR (64) NOT NULL, STATUS VARCHAR (8) NULL, TIMEDATE DATETIME NOT NULL, PASSWORD VARCHAR (255) NÃO NULL, ONLINE TINYINT (1) padrão 0 NOT NULL, PRIMARY KEY (ID)) ")
 [EL Warning]: 2010-05-31 14: 39: 06.074 - ServerSession (16053322) - Exceção [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100517-r7246): org.eclipse.persistence.exceptions .DatabaseException

Depois disso, continua com o seguinte.

Estou fazendo algo errado ou é um bug?

A partir do EclipseLink 2.4, você pode usar isso na especificação de sua unidade de persistência:

  

Esse é o comportamento esperado ao usar o valor create-tables . Da documentação sobre a propriedade eclipselink.ddl-generation :

Usando as Extensões EclipseLink JPA para Geração de Esquema

A seguir estão os valores válidos para o uso em um arquivo persistence.xml :

  • none – o EclipseLink não gera DDL; Nenhum esquema é gerado.
  • create-tables – O EclipseLink tentará executar um CREATE TABLE SQL para cada tabela. Se a tabela já existir, o EclipseLink seguirá o comportamento padrão de seu database específico e a combinação do driver JDBC (quando um SQL CREATE TABLE for emitido para uma tabela já existente). Na maioria dos casos, uma exceção é lançada e a tabela não é criada. O EclipseLink continuará com a próxima instrução. (Veja também eclipselink.create-ddl-jdbc-file-name .)
  • drop-and-create-tables – O EclipseLink tentará DROP todas as tabelas, em seguida, CREATE all tables. Se algum problema for encontrado, o EclipseLink seguirá o comportamento padrão da combinação específica do database e do driver JDBC e continuará com a próxima instrução. (Veja também eclipselink.create-ddl-jdbc-file-name e eclipselink.drop-ddl-jdbc-file-name .)

Então você pode querer drop-and-create-tables vez disso.

A implementação do Hibernate JPA faz exatamente o que você deseja. Aqui está a propriedade que permite esse comportamento:

 property name="hibernate.hbm2ddl.auto" value="update" 

create-or-extend-tables faz o truque