Dúvida com JPA / HIBERNATE

4 respostas
R

Bom, tenho uma classe BeanPai, Venda e ItemVenda.

A classe BeanPai tem 1 propriedade PROTECTED chamada “superior” e não possui nenhuma notação JPA.
A classe Venda tem as propriedades: cod, data e itens (que é um Set de ItemVenda), esta tem notação JPA.
A classe ItemVenda tem: cod, produto, qtd e venda (que é do tipo Venda) esta tem notação JPA e estende (extends) da classe BeanPai (que não tem notação JPA).

Meu problema:

A classe Venda tem o atributo "itens" que é um @OneToMany, e quando faço "mappedBy = superior" ele diz que o atributo "superior" não existe na classe ItemVenda. De fato, entendo que este atributo seja da classe pai BeanPai, porém qual seria a outra forma conveniente de referenciar este atributo tem mudar 1 linha na classe BeanPai ?

4 Respostas

drsmachado

Pesquise por @MappedSuperclass.
E não é notação é ANOTAÇÃO.

R

Primeiramente, obrigado pela correção do “notação”. Outra coisa é que o @MappedSuperclass deve ser posto na classe Pai, no meu caso : BeanPai, e como disse não posso alterar esta classe pois não tenho o .Java dela

drsmachado

Então você não pode referenciar um atributo que existe nela como sendo o responsável pelo mapeamento, afinal, o mapeamento não está nele, não é?

R

Bom, como não tenho acesso ao atributo “superior” da classe BeanPai, estou mapeando pelo método getSuperior (fazendo um override), veja:

@ManyToOne(fetch=FetchType.LAZY, targetEntity=Venda.class)
	@JoinColumn(name="id_venda")
	public BeanPai getSuperior(){
		return super.getSuperior();
	}
Criado 9 de julho de 2013
Ultima resposta 9 de jul. de 2013
Respostas 4
Participantes 2