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:
public class Produto { // da tabela "produto"
private int idProduto;
private String nome;
private List<ProdutoVersao> versao;
// getters e setters...
}
E a classe ProdutoVersao, onde um Produto pode ter muitas versões:
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...
}
A classe filha seria algo assim:
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...
}
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!!
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...
}
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?