A Entidade Pedido tem um campo id com generatedValue, e tem um mapeamento one-to-many para ItemPedido.
Em Item pedido, tem um campo pedido_Id(Fk para o id da entidade Pedido).
Quando vou incluir um pedido, o id de Pedido é gerado e inserido, e na Tabela ItemPedido são inseridos vários itens, mas a coluna pedido_Id não tem o valor que deveria vir de id da entidade Pedido, ele fica null.
Alguém sabe o problema?
rod
Fevereiro 7, 2009, 6:59am
#2
coloque o codigo das 2 entidades aqui…
fica mais facil saber o que esta errado!
package model;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Pedido {
@Id
private Long id;
@Column
@Temporal(TemporalType.DATE)
private Date dt;
@Column
@Temporal(TemporalType.TIME)
private Date horaMin;
@ManyToOne(targetEntity=Empresa.class)
@JoinColumn(name="id_empresa",referencedColumnName="id")
private Empresa empresa;
@OneToMany(targetEntity=ItemPedido.class,mappedBy="id_pedido",cascade=CascadeType.ALL)
private List<ItemPedido> itensPedido;
@ManyToOne(targetEntity=Cliente.class)
@JoinColumn(name="id_cliente",referencedColumnName="id")
private Cliente cliente;
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public List<ItemPedido> getItensPedido() {
return itensPedido;
}
public void setItensPedido(List<ItemPedido> itensPedido) {
this.itensPedido = itensPedido;
}
public Empresa getEmpresa() {
return empresa;
}
public void setEmpresa(Empresa empresa) {
this.empresa = empresa;
}
public Date getDt() {
return dt;
}
public void setDt(Date dt) {
this.dt = dt;
}
public Date getHoraMin() {
return horaMin;
}
public void setHoraMin(Date horaMin) {
this.horaMin = horaMin;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
package model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class ItemPedido {
@Id @GeneratedValue
private Long id;
@ManyToOne(targetEntity=Pedido.class)
@JoinColumn(name="id_pedido",referencedColumnName="id")
private Long id_pedido;
private int quantidade;
private String descItem;
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public String getDescItem() {
return descItem;
}
public void setDescItem(String descItem) {
this.descItem = descItem;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getId_pedido() {
return id_pedido;
}
public void setId_pedido(Long id_pedido) {
this.id_pedido = id_pedido;
}
}
Ai está!
scheide
Fevereiro 9, 2009, 1:42pm
#4
Não sou expert em Hibernate, mas quando mapeio uma chave-estrangeira (como o seu id_pedido), faço assim:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="cai_numero", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
private Caixa caixa;
Acho que o tipo de id_pedido deve ser Pedido e não Long. Tente colocar também o insertable=true e updatable=true (não sei se são default’s do Hibernate). Já teve caso de eu ter que usar o nullable=false também.
[]'s
Eu fiz o que você falou, mas ainda continua sem inserir!
Alguém me ajude!
Ao invés disso
# @ManyToOne(targetEntity=Pedido.class)
# @JoinColumn(name="id_pedido",referencedColumnName="id")
# private Long id_pedido;
Faz assim:
# @ManyToOne(targetEntity=Pedido.class)
# private Pedido pedido;
# @OneToMany(targetEntity=ItemPedido.class,mappedBy="pedido",cascade=CascadeType.ALL)
# private List<ItemPedido> itensPedido;
scheide
Fevereiro 11, 2009, 3:15pm
#7
tentou colocar o nullable=false?
Já sim! Tentei o que vocês falaram e nada mudou, a coluna id_pedido, continua sendo setada null.
Quando eu coloco o nullable=false, ai da erro!
Eu consegui, faltava eu da um setter na propriedade pedido da classe ItemPedido antes de dar um save.
Valeu pessoal!