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

2 respostas
thiagobaptista

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?

2 Respostas

dieguittom

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

thiagobaptista

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!

Criado 1 de junho de 2011
Ultima resposta 3 de jun. de 2011
Respostas 2
Participantes 2