Fórum Dúvida sobre mapeamento Hibernate #481702

06/06/2014

0

Boa tarde,

Estamos com dúvida sobre a seguinte situação, existe a entidade Produto, no qual possui N atributos, um desses faz referencia a Unidade de Medida, no qual também possui N atributos. Quando faço uma consulta de produto, a mesma retorna automaticamente todos os atributos, inclusive os relacionamento, aqui está o problema, um desses relacionamento possui muitos atributos que é o caso da Unidade Medida, mas neste momento só será utilizado o id(PK) e a descrição da Unidade Medida. Com isso estava pesquisando alguma forma de retornar somente esses atributos. Não foi encontrado nenhuma forma "elegante" de fazer isso. Alguém tem alguma sugestão de como solucionar este caso?

Foi feito alguns testes da seguinte forma, foi criado uma classe chama UnidadeMedidaSimples, no qual possui somente a descrição e id(pk).

@MappedSuperclass
public class UnidadeMedidaSimples implements Serializable {

	@Id
	@SequenceGenerator(name="UNIDADE_CODIGOINTERNO_GENERATOR", sequenceName="ESCRITA.SEQ_UNIDADE", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="UNIDADE_CODIGOINTERNO_GENERATOR")
	@Column(name="co_unidade")
	private Integer codigoInterno = 0;

	@Column(name = "no_unidade")
	@NotBlank(message = "{validacao.unidademedida.descricao.blank}")
	@Size(max = 20, message = "{validacao.unidademedida.descricao.size}")
	private String descricao;


E foi criado uma classe chamada UnidadeMedida que estende de Unidade de Medida Simples.

@Entity
@Table(schema = "escrita", name = "unidade")
@Inheritance
public class UnidadeMedida extends UnidadeMedidaSimples implements Serializable {

	@Column(name = "sigla")
	private String sigla;

	@Column(name = "fator_conversao")
	private String fator;

	@Column(name = "fator_conversao1")
	private String fator;

	@Column(name = "fator_conversao2")
	private String fator;

       //mais N atributos abaixo


Gostaria de saber se é possível utilizar a classe UnidadeMedidaSimples como uma entidade, porque neste caso seria utilizada a mesma no relacionamento com Produto e não UnidadeMedida, ou seja, quando for necessário todos os atributos faz o relacionamento direto com UnidadeMedida. Mas vocês podem pensar porque ele não faz logo duas classe mapeada diretamente, que resolveria este caso. Mas neste caso existiria duplicidade de código, no qual ficaria mais complexo para dar manutenção.

Espero que tenham entendido a dúvida.

Desde já obrigado.
Pti Ltda

Pti Ltda

Responder

Posts

09/06/2014

Daniel Volpato

Boa noite Pti,
Tirando as regras do negócio, talvez isso aqui possa te ajudar.
Também procure sobre classes embutidas (@Embeddable e @Embedded).
Responder

Gostei + 0

10/06/2014

Pti Ltda

Olá, Obrigado pelo retorno.

No caso do @Embeddable tudo que está mapeado é retornar no objeto "PAI", no qual cairia na mesma situação. Nunca havia utilizado a anotação @Basic, fiz o mapeamento com a mesma, mas continua retornando o atributo mesmo mapeado. Você sabe me informar se existe alguma outra regra para este caso?

Att.
Responder

Gostei + 0

11/06/2014

Daniel Volpato

Então seria melhor utilizar uma view pra essa tua situação.
(1)Você pode criar na tua base de dados ,ou (2) apenas uma classe que represente essa view (sem criar na base de dados)
no caso 2 o Jpa provê essa funcionalidade - pesquise sobre select new do jpql,
aqui tem um exemplo
fugindo um pouco do assunto, vale a pena repensar no que diz respeito a herança que você está usando, não que a herança seja ruim, mas dê preferência a composição
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar