JPA: Como gerar automaticamente tabelas de sombra (histórico)

Estou usando o recurso Histórico do EclipseLink .

Tanto quanto eu entendo, atualmente não há suporte para realmente criar a tabela de sombra . Estou usando a geração automática de esquema do JPA 2.1 para todas as minhas tabelas base. Funciona bem.

Agora estou procurando uma maneira de automatizar o processo de criação das tabelas de sombra. Para cada tabela base, deve haver uma tabela de sombras com algumas colunas extras. Caso contrário, a tabela de sombra terá a estrutura exata da tabela que está sombreando.

Eu tenho mais de 50 entidades no modelo e com um pouco de relações muitos-para-muitos, todas elas são mapeadas para cerca de 55 tabelas físicas. Eu não gostaria de manter scripts de criação de DDL para todas as tabelas de sombra.

No momento, o projeto é independente de database (pelo menos para os suspeitos do costume) e eu gostaria de mantê-lo assim. Estar ligado ao EclipseLink não é um problema, portanto, uma solução específica do EclipseLink está ok.

Então, como criá-los tabelas de sombra?

Não há problema em ter uma subclass para representar cada tabela de histórico. Diga se a class base é Car , então:

 @Entity @Table(name="CAR_HIST") public class ClassHist extends Car { ... // some extra audit fields here } 

e com uma @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) no Car ele realmente fará o trabalho com a geração do esquema JPA. Então, quase lá com isso. Exceto para tabelas de relacionamentos muitos-para-muitos, onde não há nenhuma entidade em que eu possa me deparar, não posso obter uma tabela de sombra gerada para a tabela de relacionamentos.

ATUALIZAR

Acontece que usar inheritance para criar as tabelas de sombra não é uma ótima idéia. A razão é que as consultas JPA JPQL são polimórficas . Isso significa que uma consulta como SELECT a FROM Car vai realmente para a tabela CAR_HIST também porque CarHist é apenas uma subclass de Car . Você obtém o UNION do SELECT dessas tabelas. Obviamente não quero que eu queira. A outra razão pela qual não é uma boa idéia é que a subclass usada para o histórico herdará a chave primária de seu pai. Isso também é simplesmente errado.

ATUALIZAÇÃO 2

Eu descobri que há um RFE para esse recurso no EclipseLink.