JPA gerando Tabela com uma coluna a mais...(Resolvido)

Apenas pra constar uma abordagem melhor é essa

[code] s.beginTransaction();

Produto bolo = (Produto) s.load(Produto.class, 1);
Produto suco = (Produto) s.load(Produto.class, 2);

Pedido p = new Pedido();

p.addItem(bolo,3);
p.addItem(suco,7);

s.save§;
s.getTransaction().commit();[/code]

ai o método addItem seria…

public ItemPedido addItem(Produto produto, int quantidade) { ItemPedido item = new ItemPedido(this,produto,quantidade); getItens().add(item); return item; }

Agora que isolei as classes realmente funcionou. Ia postar mas vc foi mais rápido. Tem alguma coisa errada mesmo com meu hashCode ou a sequencia em que ele é usado. Inclusive funcionou com o Hibernate Tools também. Mas o editor “xia” por causa daquele problema que você falou. Problema resolvido cara. Valew a ajuda e atenção.

outra coisa

field publico é furado… anotação em propriedade é algo melhor, pq vc pode fazer operações nos dados que xegam… vou postar como mapiei aki

[size=18]Produto.java[/size]

[code]package br.com.tomazlavieri.model;

import java.io.Serializable;
import javax.persistence.*;

@Entity
public class Produto implements Serializable {
private static final long serialVersionUID = 306116498256151785L;
private Integer id;
private String nome;

@Id
@GeneratedValue
public Integer getId() {
	return id;
}

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

public String getNome() {
	return nome;
}

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

@Override
public int hashCode() {
	if (getNome() == null)
		return super.hashCode();
	final int prime = 7;
	int result = 1;
	result = prime * result + nome.hashCode();
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (getNome() == null)
		return false;
	if (!(obj instanceof Produto))
		return false;
	Produto other = (Produto) obj;
	return getNome().equals(other.getNome());
}

@Override
public String toString() {
	return getNome();
}

}[/code]

[size=18]Pedido.java[/size]

[code]package br.com.tomazlavieri.model;

import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.*;
import static javax.persistence.CascadeType.ALL;
import static javax.persistence.TemporalType.TIMESTAMP;

@Entity
public class Pedido implements Serializable {
private static final long serialVersionUID = -8514647334843363802L;
private Integer id;
private Date data;
private Set<ItemPedido> itens = new HashSet<ItemPedido>();

public Pedido() {
	super();
}
@Id
@GeneratedValue
public Integer getId() {
	return id;
}

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

@OneToMany(mappedBy="pedido", cascade = ALL)
protected Set&lt;ItemPedido&gt; getItens() {
	return itens;
}

/**
 * Resgata a lista somente leitura dos pedidos.
 * @return
 */
@Transient
public Set&lt;ItemPedido&gt; getItensRO() {
	return Collections.unmodifiableSet(getItens());
}
/**
 * Adiciona um item ao pedido
 * @param produto
 * @param quantidade
 * @return
 */
@Transient
public ItemPedido addItem(Produto produto, int quantidade) {  
	ItemPedido item = new ItemPedido(this,produto,quantidade);  
	getItens().add(item);  
	return item;  
}
/**
 * Remove um item do pedido
 * @param produto
 * @return
 */
@Transient
public boolean remove(Produto produto) {  
	ItemPedido item = new ItemPedido(this,produto,0);  
	return getItens().remove(item);
}

protected void setItens(Set&lt;ItemPedido&gt; itens) {
	this.itens = itens;
}

@PrePersist
@Transient
public void prePersist() {
	setData(new Date());
}

@Temporal(TIMESTAMP)
@Column(updatable = false)	public Date getData() {
	return data;
}
public void setData(Date data) {
	this.data = data;
}
@Override
public int hashCode() {
	if (getId() == null)
		return super.hashCode();
	final int prime = 11;
	int result = 1;
	result = prime * result + getId().hashCode();
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (getId() == null)
		return false;
	if (!(obj instanceof Pedido))
		return false;
	Pedido other = (Pedido) obj;
	return getId().equals(other.getId());
}

@Override
public String toString() {
	return String.valueOf(getId());
}

}[/code]

[size=18]ItemPedido.java[/size]

[code]package br.com.tomazlavieri.model;

import java.io.Serializable;
import javax.persistence.*;

@Entity
@IdClass(ItemPedidoPK.class)
public class ItemPedido implements Serializable {
private static final long serialVersionUID = -7759835629199252623L;
private static final String TO_STRING = “[pedido = %s , produto = %s , quantidade = %d]”;
private Produto produto;
private Pedido pedido;
private Integer quantidade;

public ItemPedido() {
	super();
}
public ItemPedido(Pedido p,Produto produto, int quantidade) {
	setPedido(p);
	setProduto(produto);
	setQuantidade(quantidade);
}
@Id
@ManyToOne
public Produto getProduto() {
	return produto;
}

public void setProduto(Produto produto) {
	this.produto = produto;
}
@Id
@ManyToOne
public Pedido getPedido() {
	return pedido;
}

public void setPedido(Pedido pedido) {
	this.pedido = pedido;
}

public Integer getQuantidade() {
	return quantidade;
}

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

@Override
public int hashCode() {
	if (getProduto() == null || getPedido() == null)
		return super.hashCode();
	final int prime = 13;
	int result = 1;
	result = prime * getPedido().hashCode();
	result = prime * getProduto().hashCode();
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (getPedido() == null || getProduto() == null)
		return false;
	if (!(obj instanceof ItemPedido))
		return false;
	ItemPedido other = (ItemPedido) obj;
	return getProduto().equals(other.getProduto()) &&
			getPedido().equals(other.getPedido());
}

@Override
public String toString() {		
	return String.format(TO_STRING, getPedido(),getProduto(),getQuantidade());
}

}[/code]

[size=18]ItemPedidoPK.java[/size]

[code]@Embeddable
public class ItemPedidoPK implements Serializable {
private static final long serialVersionUID = 6958675790304225564L;
private Pedido pedido;
private Produto produto;

public ItemPedidoPK() {
	super();
}

@ManyToOne
public Produto getProduto() {
	return produto;
}

public void setProduto(Produto produto) {
	this.produto = produto;
}

@ManyToOne
public Pedido getPedido() {
	return pedido;
}

public void setPedido(Pedido pedido) {
	this.pedido = pedido;
}

@Override
public int hashCode() {
	if (getProduto() == null || getPedido() == null)
		return super.hashCode();
	final int prime = 17;
	int result = 1;
	result = prime * getPedido().hashCode();
	result = prime * getProduto().hashCode();
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (getPedido() == null || getProduto() == null)
		return false;
	if (!(obj instanceof ItemPedido))
		return false;
	ItemPedidoPK other = (ItemPedidoPK) obj;
	return getProduto().equals(other.getProduto()) &&
			getPedido().equals(other.getPedido());
}

}[/code]