Duvida Mapeamento

4 respostas
Marques

Prezados

Tenho essas duas tabelas e gostaria de saber como fazer o mapeamento das mesmas.
Diga-me se é aqui que se aplica o tal do N:M

conta_contabil
idConta
descricao_conta
tipo_conta (1=Débito 2=Credito)

produto
idProduto
descricao_produto
idConta_debito
idConta_credito

Eu acho que existem dois relacionamentos da tabela produto para a tabela conta_contabil (digo issopois um produto tem uma conta para debito e outra para crédito). Estou certo?

Como é que eu mapeio isso?

Muito obrigado,

Marques

4 Respostas

fsquadro

Marques,

Primeiramente eu fiz algumas alterações que achei interessante, como por exemplo, ao invés de criar o campo tipo_conta como int, ou varchar para boolean.

Outra coisa, acredito que não precise de na tabela produto, ter o id_contaDebito e o id_contaCredito. Criei uma tabela de ligação para um relacionamento, muitos para muitos.

Caso eu tenho entendido algo errado, pode falar, por favor.

Segue o mapeamento das classes.

produto.java

@Entity
@Table(name="tb_produto")
public class Produto {
    
    @Id
    @GeneratedValue
    @Column(name="id_produto", nullable=false, unique=true)
    private Integer id;
    
    @Column(name="txt_descricao", nullable=false, unique=true)
    private String descricao;
    
    @ManyToMany(targetEntity=hiberapp0.Contabil.class, cascade={CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(
        name="tb_produto_contabil",
        joinColumns={@JoinColumn(name="id_contabil", table="tb_contabil")},
        inverseJoinColumns = @JoinColumn( name="id_produto")
    )      
    private Set<Contabil> conta;
   
    //gets ans sets

}

Contabil.java

@Entity
@Table(name="tb_contabil")
public class Contabil {
    
    @Id
    @GeneratedValue
    @Column(name="id_contabil", nullable=false, unique=true)
    private Integer id;
    
    @Column(name="txt_descricao", nullable=false, unique=false, length=255)    
    private String descricao;
    
    @Column(name="bol_conta_credito", nullable=false, unique=false)    
    private boolean tipoContaCredito;
    
    //gets and sets

}

Espero ter ajudado.

Marques

Meu caro,

Obrigado pelas dicas até aqui, porem eu imaginei que quando salvasse o Produto o hibernate gerasse a tabela de relacionamento.

Como é a forma correta de salvar ?

Muito obrigado,

Marques

fsquadro

Marques:
Meu caro,

Obrigado pelas dicas até aqui, porem eu imaginei que quando salvasse o Produto o hibernate gerasse a tabela de relacionamento.

Como é a forma correta de salvar ?

Muito obrigado,

Marques

Ele gera, mas você tem que mapear. Ele só faz o que você mapeia.
Abaixo esta o código onde está o mapeamento para ele criar a tabela.

@ManyToMany(targetEntity=hiberapp0.Contabil.class, cascade={CascadeType.PERSIST, CascadeType.MERGE})
     @JoinTable(
         name="tb_produto_contabil",
         joinColumns={@JoinColumn(name="id_contabil", table="tb_contabil")},
         inverseJoinColumns = @JoinColumn( name="id_produto")
     )
Marques

Meu nobre Fernando.

Eu fiz o que vc falou:

Classe Produto

package br.com.fit.entity;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;

@Entity
public class Produto {
	private Long idProduto;
	private String codigoProduto;
	private String codigoBarras;
	private Long unidadeMedida;
	private String descrProduto;
	private ProdutoSubnivel subnivel;
	private BigDecimal estoqueMinimo;
	private String localizacao;
	private BigDecimal pesoLiquido;
	private Long idSituacaoTrib;
	private Long idCodigoNCM;	
	private Set<ContaContabil> contaContabil;
	
	public String getCodigoBarras() {
		return codigoBarras;
	}
	public void setCodigoBarras(String codigoBarras) {
		this.codigoBarras = codigoBarras;
	}
	public BigDecimal getEstoqueMinimo() {
		return estoqueMinimo;
	}
	public void setEstoqueMinimo(BigDecimal estoqueMinimo) {
		this.estoqueMinimo = estoqueMinimo;
	}
	public Long getIdCodigoNCM() {
		return idCodigoNCM;
	}
	public void setIdCodigoNCM(Long idCodigoNCM) {
		this.idCodigoNCM = idCodigoNCM;
	}
	public Long getIdSituacaoTrib() {
		return idSituacaoTrib;
	}
	public void setIdSituacaoTrib(Long idSituacaoTrib) {
		this.idSituacaoTrib = idSituacaoTrib;
	}
	public String getLocalizacao() {
		return localizacao;
	}
	public void setLocalizacao(String localizacao) {
		this.localizacao = localizacao;
	}
	public BigDecimal getPesoLiquido() {
		return pesoLiquido;
	}
	public void setPesoLiquido(BigDecimal pesoLiquido) {
		this.pesoLiquido = pesoLiquido;
	}
	public String getCodigoProduto() {
		return codigoProduto;
	}
	public void setCodigoProduto(String codigoProduto) {
		this.codigoProduto = codigoProduto;
	}
	public String getDescrProduto() {
		return descrProduto;
	}
	public void setDescrProduto(String descrProduto) {
		this.descrProduto = descrProduto;
	}
	@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
	public Long getIdProduto() {
		return idProduto;
	}
	public void setIdProduto(Long idProduto) {
		this.idProduto = idProduto;
	}
	@ManyToOne(fetch = FetchType.LAZY)	
	@JoinColumn(name = "idSubnivel")
	public ProdutoSubnivel getSubnivel() {
		return subnivel;
	}
	public void setSubnivel(ProdutoSubnivel subnivel) {
		this.subnivel = subnivel;
	}
	public Long getUnidadeMedida() {
		return unidadeMedida;
	}
	public void setUnidadeMedida(Long unidadeMedida) {
		this.unidadeMedida = unidadeMedida;
	}
	@ManyToMany(targetEntity=ContaContabil.class, cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@JoinTable(
	         name="ProdutoContaContabil",
	         joinColumns={@JoinColumn(name="idContaContabil", table="contaContabil")},
	         inverseJoinColumns = @JoinColumn( name="idProduto"))
	public Set<ContaContabil> getContaContabil() {
		return contaContabil;
	}
	
	public void setContaContabil(Set<ContaContabil> contaContabil) {
		this.contaContabil = contaContabil;
	}
}

Classe ContaContábil

package br.com.fit.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class ContaContabil implements Serializable {	
	
	private Long idContaContabil;	
	private Integer nivel;
	private Integer nivel1;
	private Integer nivel2;
	private Integer nivel3;
	private Integer nivel4;
	private Integer nivel5;
	private Integer nivel6;
	private Integer nivel7;
	private Integer idTipoMovimento;
	private String nomeConta;
	private String codigoConta;
	private String codigoReduzidoCC;
	private Empresa empresa;
	
	
	public ContaContabil() {
	}
	
	public String getNomeConta() {
		return nomeConta;
	}

	public void setNomeConta(String nomeConta) {
		this.nomeConta = nomeConta;
	}

	public Integer getNivel1() {
		return nivel1;
	}

	public void setNivel1(Integer nivel1) {
		this.nivel1 = nivel1;
	}

	public Integer getNivel2() {
		return nivel2;
	}

	public void setNivel2(Integer nivel2) {
		this.nivel2 = nivel2;
	}

	public Integer getNivel3() {
		return nivel3;
	}

	public void setNivel3(Integer nivel3) {
		this.nivel3 = nivel3;
	}

	public Integer getNivel4() {
		return nivel4;
	}

	public void setNivel4(Integer nivel4) {
		this.nivel4 = nivel4;
	}

	@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
	public Long getIdContaContabil() {
		return idContaContabil;
	}

	public void setIdContaContabil(Long idContaContabil) {
		this.idContaContabil = idContaContabil;
	}	

	@ManyToOne(fetch = FetchType.LAZY)	
	@JoinColumn(name = "idPessoa")
	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public String getCodigoConta() {
		return codigoConta;
	}

	public void setCodigoConta(String codigoConta) {
		this.codigoConta = codigoConta;
	}

	public Integer getNivel() {
		return nivel;
	}

	public void setNivel(Integer nivel) {
		this.nivel = nivel;
	}

	public Integer getIdTipoMovimento() {
		return idTipoMovimento;
	}

	public void setIdTipoMovimento(Integer idTipoMovimento) {
		this.idTipoMovimento = idTipoMovimento;
	}

	public Integer getNivel5() {
		return nivel5;
	}

	public void setNivel5(Integer nivel5) {
		this.nivel5 = nivel5;
	}

	public Integer getNivel6() {
		return nivel6;
	}

	public void setNivel6(Integer nivel6) {
		this.nivel6 = nivel6;
	}

	public Integer getNivel7() {
		return nivel7;
	}

	public void setNivel7(Integer nivel7) {
		this.nivel7 = nivel7;
	}

	public String getCodigoReduzidoCC() {
		return codigoReduzidoCC;
	}

	public void setCodigoReduzidoCC(String codigoReduzidoCC) {
		this.codigoReduzidoCC = codigoReduzidoCC;
	}
}

método onde eu gravo Produto

produto.setSubnivel(subnivel);
		produto.setDescrProduto(descrProduto);
		produto.setCodigoBarras(input.getStringValue("codigoBarras"));
		produto.setCodigoProduto(codigoProduto);
		produto.setUnidadeMedida(new Long(input.getIntValue("idUnidadeMedida")));
		produto.setLocalizacao(input.getStringValue("localizacao"));
		produto.setIdSituacaoTrib(new Long(input.getIntValue("idSituacaoTrib")));
		produto.setIdCodigoNCM(new Long(input.getIntValue("idCodigoNCM")));		
		produtoDAO.save(produto);

Agora tem uma coisa: como é que eu populo essa propriedade do Produto, se é que isso é necessário?

public Set<ContaContabil> getContaContabil() {
		return contaContabil;
	}

MUito obgrigado,

Marques

Criado 11 de abril de 2007
Ultima resposta 11 de abr. de 2007
Respostas 4
Participantes 2