JPA - mapeando herança com chave composta que é chave estrangeira

Minha gente, estou com um problema muito cabeludo envolvendo JPA.

Estamos trabalhando com uma base “legada” (que a equipe de DBAs criou e nós desenvolvedores não podemos mexer) criando uma aplicação usando JPA no framework JBoss Seam. Porém, aparentemente os DBAs quiseram mostrar serviço e “tirar onda”, então resolveram inventar uma complexidade absurda em algumas tabelas importantes…

Basicamente, preciso mapear uma herança, onde a classe filha possui uma chave primária composta usando dois campos que também são chaves estrangeiras para campos na classe pai.

A classe pai é algo mais ou menos assim:

[code]public class Produto { // da tabela “produto”

private int idProduto;
private String nome;

private List<ProdutoVersao> versao;

// getters e setters...

}[/code]

E a classe ProdutoVersao, onde um Produto pode ter muitas versões:

[code]public class ProdutoVersao { // da tabela “produto_versao”

private int idProduto; // é uma CHAVE ESTRANGEIRA para a tabela produto
private Date dataDeCadastro;

private String gerenteResponsavel;
private String setor;

// getters e setters...

}[/code]

A classe filha seria algo assim:

[code]public class Livro extends Produto { // da tabela “livro”

private IdLivro id; // uma classe "embedded" por ser chave composta

private String autor;
private String isbn;

// getters e setters...

}[/code]

O grande problema é justamente nessa chave primária composta, representada pela classe IdLivro, porque seus dois únicos atributos, um inteiro e uma data, deveriam ser chaves estrangeiras para os dois atributos de mesmo nome da classe ProdutoVersao!!

[code]public class IdLivro { // não representa nenhuma tabela diretamente

private int idProduto; // chave estrangeira para a tabela produto_versao
private Date dataDeCadastro; // chave estrangeira para a tabela produto_versao

// getters e setters...

}[/code]

Não faço a menor idéia de como mapear essa salada para JPA. Porque o lance é que, quando eu persistir uma instância de Livro, o sistema deverá automaticamente preencher as tabelas produto, livro e produto_versao com os cados cadastrados, inclusive mantendo o mesmo número de id para as três classes.

Alguém pode me ajudar?

Não entendi direito a estrutura

Mas no lugar do idProduto que é a chave estrageira não deveria ter o objeto Produto em vez do int

Diego, tem razão, eu não soube explicar direito o problema. Fiz algumas pesquisas aqui e consegui isolar melhor o problema e, portanto, abri um novo tópico, com um enunciado diferente, pra continuar a discussão.

Mas valeu pela atenção!