Quero fazer o clássico exemplo do muitos Pedidos para muitos Produtos usando Hibernate com Annotations
@Entity
public class Produto {
@Id
@GeneratedValue
private int idProduto;
private String nome;
@ManyToMany(mappedBy = "produtos")
private List<Pedido> pedido;
//getters e setter omitidos
@Entity
public class Pedido {
@Id
@GeneratedValue
private int numeroPedido;
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataFeita;
@ManyToMany
@JoinTable(
name="Pedido_Produto",
joinColumns=@JoinColumn(name="idProduto"),
inverseJoinColumns=@JoinColumn(name="numeroPedido")
)
private List<Produto> produtos;
//getters e setter omitidos
Ele gera uma tabela intermediária ProdutoPedido automaticamente no banco de dados (usando aquele SchemaExport), mas não consigo preencher ela, cadastro os produtos e pedidos nas suas respectivas tabelas normalmente, mas essa intermediária fica vazia.
O que falta eu fazer?
Nunca consegui fazer isso, seria tão legal conseguir!
Parece que não se pode usar List nesse tipo de relacionamento do Hibernate, mudei para Set.
Enfim, futuramente pode ser útil o código:
Pedido:
//imports omitidos
@Entity
public class Pedido {
@Id
@GeneratedValue
private int numeroPedido;
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataFeita;
@ManyToMany
@JoinTable(
name="Pedido_Produto",
joinColumns=@JoinColumn(name="numeroPedido"),
inverseJoinColumns=@JoinColumn(name="idProduto")
)
private Set<Produto> produtos;
//getters e setters
}
Produto:
@Entity
public class Produto implements java.io.Serializable {
@Id
@GeneratedValue
private int idProduto;
private String nome;
@ManyToMany(mappedBy = "produtos")
private Set<Pedido> pedido;
//getters e setters
Para criar as tabelas:
//imports omitidos
public class CriaTabelas_Pedido_Produto {
public static void main(String[] args) {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Produto.class);
cfg.addAnnotatedClass(Pedido.class);
new SchemaExport(cfg).create(true, true);
}
}
Então, teoricamente teria que funcionar com List sim. Você está abrindo uma transação antes de persistir os objetos e dando um commit nela?
Tente fazer isso com o List para ver o que acontece.
Realmente usar um Set mapeia melhor o modelo relacional, pois cada linha da tabela (cada instância da classe) é (deve ser pelo menos hehehe) única.
Só tente dar uma testada no que falei, só para desencargo de consciência.
Então, teoricamente teria que funcionar com List sim. Você está abrindo uma transação antes de persistir os objetos e dando um commit nela?
Tente fazer isso com o List para ver o que acontece.
Realmente usar um Set mapeia melhor o modelo relacional, pois cada linha da tabela (cada instância da classe) é (deve ser pelo menos hehehe) única.
Só tente dar uma testada no que falei, só para desencargo de consciência.
[]´s
[/quote]
Oi David,
(Carl Sagan era o cara )
Eu faço isso sim, mesmo com a List, abria uma transação no construtor do Dao, e dava um commit depois do save(). Não sei se isso é certo. De qualquer modo eu tinha tentado de todos os modos.