Venda e Item venda como fica as classes?

Boa noite a todos,

Pessoal tenho três tabelas no banco de dados postgres Venda, ItemVenda e Produto. Como descrita a seguir

  Tabela produto
  idproduto serial NOT NULL,
  nome character varying(100) NOT NULL,
  preco numeric(10,2) NOT NULL,
  CONSTRAINT produto_pkey PRIMARY KEY (idproduto) 

  Tabela Venda
  [quote]idvenda serial NOT NULL,
  valortotal numeric(10,2) NOT NULL,
  CONSTRAINT venda_pkey PRIMARY KEY (idvenda)
 
  Tabela ItemVenda

  quantidade integer NOT NULL,
  produto integer NOT NULL, fk de produtoi
  venda integer NOT NULL, fk de venda

Estou usando hibenate com Annotattions, gostaria de saber como fica a classe itemVenda pois não tem PK e o hibernate pede para colocar uma identificação.

Aqui estão as classes Produto e venda

[code]@Entity
@Table(name = “venda”)
private static final long serialVersionUID = 1L;
@Id
@Column(name = “idvenda”)
private Integer idvenda;
@Column(name = “valortotal”)
private BigDecimal valortotal;
@OneToMany(cascade = CascadeType.ALL, mappedBy = “venda”)
private List itemvendaList;

public Venda() {
}

public Venda(Integer idvenda) {
    this.idvenda = idvenda;
}

public Venda(Integer idvenda, BigDecimal valortotal) {
    this.idvenda = idvenda;
    this.valortotal = valortotal;
}

public Integer getIdvenda() {
    return idvenda;
}

public void setIdvenda(Integer idvenda) {
    this.idvenda = idvenda;
}

public BigDecimal getValortotal() {
    return valortotal;
}

public void setValortotal(BigDecimal valortotal) {
    this.valortotal = valortotal;
}

public List<Itemvenda> getItemvendaList() {
    return itemvendaList;
}

public void setItemvendaList(List<Itemvenda> itemvendaList) {
    this.itemvendaList = itemvendaList;
}

}[/code]

[code]@Entity
@Table(name = “produto”)

public class Produto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = “idproduto”)
private Integer idproduto;
@Column(name = “nome”)
private String nome;
@Column(name = “preco”)
private BigDecimal preco;
@OneToMany(cascade = CascadeType.ALL, mappedBy = “produto”)
private List itemvendaList;

public Produto() {
}

public Produto(Integer idproduto) {
    this.idproduto = idproduto;
}

public Produto(Integer idproduto, String nome, BigDecimal preco) {
    this.idproduto = idproduto;
    this.nome = nome;
    this.preco = preco;
}

public Integer getIdproduto() {
    return idproduto;
}

public void setIdproduto(Integer idproduto) {
    this.idproduto = idproduto;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public BigDecimal getPreco() {
    return preco;
}

public void setPreco(BigDecimal preco) {
    this.preco = preco;
}

public List<Itemvenda> getItemvendaList() {
    return itemvendaList;
}

public void setItemvendaList(List<Itemvenda> itemvendaList) {
    this.itemvendaList = itemvendaList;
}

}[/code]

Como ficaria a classe ItemVenda, precisaria de alguma identificação a mais ou coisa parecida?

Agradeço a todos que colaborarem

ItemVenda é uma associação de muitos para muitos entre Venda e Produto, você pode mapear essa associação da seguinte maneira:


@Entity
public class ItemVenda implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EmbeddedId
	private ID id;
	
	@ManyToOne
	@JoinColumn(name = "idVenda", insertable = false, updatable = false)
	private Venda venda;
	
	@ManyToOne
	@JoinColumn(name = "idProdto", insertable = false, updatable = false)
	private Produto produto;
	
	@Column
	private Integer quantidade;
	
	
	public ItemVenda() {
		super();
		this.id = new ID();
	}


	public ItemVenda(Venda venda, Produto produto, Integer quantidade) {
		super();
		this.venda = venda;
		this.produto = produto;
		this.quantidade = quantidade;
		this.id = new ID(venda.getIdVenda(), produto.getIdProduto());
	}

	public ID getId() {
		return id;
	}

	public void setId(ID id) {
		this.id = id;
	}

	public Venda getVenda() {
		return venda;
	}

	public void setVenda(Venda venda) {
		this.venda = venda;
		if(venda != null){
			this.id.setIdVenda(venda.getIdVenda());
		}
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
		if(produto != null){
			this.id.setIdProduto(produto.getIdProduto());
		}
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}


	@Embeddable
	public static class ID implements Serializable{
		private static final long serialVersionUID = 1L;
		
		@Column
		private Integer idVenda;
		
		@Column
		private Integer idProduto;

		public ID() {
			super();
		}

		public ID(Integer idVenda, Integer idProduto) {
			super();
			this.idVenda = idVenda;
			this.idProduto = idProduto;
		}

		@Override
		public int hashCode() {
			final int prime = 31;
			int result = 1;
			result = prime * result
					+ ((idProduto == null) ? 0 : idProduto.hashCode());
			result = prime * result
					+ ((idVenda == null) ? 0 : idVenda.hashCode());
			return result;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			ID other = (ID) obj;
			if (idProduto == null) {
				if (other.idProduto != null)
					return false;
			} else if (!idProduto.equals(other.idProduto))
				return false;
			if (idVenda == null) {
				if (other.idVenda != null)
					return false;
			} else if (!idVenda.equals(other.idVenda))
				return false;
			return true;
		}

		public Integer getIdVenda() {
			return idVenda;
		}

		public void setIdVenda(Integer idVenda) {
			this.idVenda = idVenda;
		}

		public Integer getIdProduto() {
			return idProduto;
		}

		public void setIdProduto(Integer idProduto) {
			this.idProduto = idProduto;
		}
		
	}


}

Assim a sua classe ItemVenda terá um id composto que é formado pelo id da Venda mais o id do Produto.
Aqui temos uma classe ID que é o mapeamento do id Composto, esta classe é anotada com @Embeddable
e você adiciona uma referência para o ID na Classe ItemVendas utilizando a anotação @EmbeddedId.
espero ter ajudado.

como o felipe postou é uma forma de se fazer porem se a classe item venda nao possuir atributos do relacionamento vc pode usar direto o @ManyToMany que automaticamente ele pegaria a chave da Venda e a chave do Produto e criaria a terceira tabela com estas chaves!