Dúvida JPA - Como mapear atributos em uma classe não persistente?

6 respostas
G

Pessoal,

Estou com uma dúvida em JPA(Hibernate).

A dúvida é a seguinte:

Eu tenho uma classe Produto. Um produto tem medida.

Na tabela de produto eu tenho MED_LARGURA, MED_ALTURA, MED_COMPRIMENTO.

Eu não quero mapear estes campos diretamente em produto. Eu gostaria de mapear estes campos na classe Medida.

Eu não gostaria de fazer isso:

umProduto.getAltura();
     umProduto.getLargura();
     umProduto.getComprimento();

Eu gostaria de fazer isso:

umProduto.getMedida().getAltura;
  umProduto.getMedida().getLargura;
  umProduto.getMedida().getComprimento;

Obrigado

Luiz Augusto

6 Respostas

P

Crie a classe Medida e anote-a com @Embeddable
Aí, dentro de Produto, basta ter um private Medida medida, e não há necessidade de anotar em nada.

Se quiser pode usar @Column na classe Medida, ou ainda usar @AttributeOverride no private Medida medida se quiser definir os nomes das colunas ali

T

Gutom,

Assim como você estou iniciando em JPA. Então gostaria se me corrigissem se estiver errado. Acredito que seria algo do tipo:

Classe medida:

@Embeddable
public class Medida{

//Definir atributos, getter e setters aqui colocando o @Column com os nomes da colunas

}

E na classe produto:

public class Produto{
//(...)

@Embedded

public Medida getMedida(){
  return medida;
}
//(...)
}

Seria isso?

G

Oi pessoal,

Obrigado pelas respostas.

Ainda tenho algumas dúvidas:

  • Como mapear os dados de produto para a classe Medida
public Class Produto{
  
  // como eu faço mapeamento dos campos (MED_ALTURA,MED_LARGURA,MED_COMPRIMENTO) aqui.
 @Embedded
  private Medida medida;

}

tjamir, eu também pensei como você, mas ainda tenho estas dúvidas.

Valeu
Luiz Augusto

T

Não entendi tua dúvida…
Você quer que na classe Medida tenha uma referência para o produto?

P

Oi Gutom, como eu disse anteriormente, é pra isso que serve a anotacao @AttributeOverride

Olhe ai a explicacao completa:
http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#d0e531

G

Obrigado Paulo,

Eu já consegui resolver:

Segue o código:

public class Produto{

@Embedded
	@AttributeOverrides({
		@AttributeOverride(name="altura",column=@Column(name="MED_ALTURA")),
		@AttributeOverride(name="largura",column=@Column(name="MED_LARGURA")),
		@AttributeOverride(name="comprimento",column=@Column(name="MED_COMPRIMENTO"))		
	})	
	private Medida medida; 
	
}

Medida

@Embeddable
public class Medida{

}

Obrigado pessoal.

Luiz Augusto

Criado 12 de junho de 2008
Ultima resposta 12 de jun. de 2008
Respostas 6
Participantes 3