[quote=javer]Pessoal,
Qual a abordagem usada para esse caso?
@OneToMany(cascade = CascadeType.DETACH)
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name = "produto_nota", joinColumns = @JoinColumn(name = "id_nota", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id_produto", referencedColumnName = "id"))
List<Produto> listaProdutos = new ArrayList<Produto>(0);
Minha dúvida é, [color=darkred]como eu guardo, por exemplo, a quantidade vendida de cada produto que está nessa lista na NotaFiscal?[/color] Sendo que essa quantidade não estaria associada ao Produto mas sim ao produto na nota fiscal X.
Traduzindo, preciso que de alguma forma essa informação (e talvez outras mais) fique em algum lugar, não consegui pensar aqui como fazer isso.
Como vocês fazem?
Obrigado[/quote]
Ola amigo,
Uma solução para seu problema seria criar uma tabela onde você usaria a nota fiscal e o produto como chaves primarias e colunas para colocar a quantidade, valor total, …
Para isso você deve utilizar uma chave primária composta nessa tabela onde serão salvos a quantidade vendida e outras informações.
Segue uma idéia:
Classe Produto
// Imports necessários
@Entity
@Table(name="Produtos")
public class Produto implements java.io.Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY, generator="id_prod")
@Column(nullable=false,name="Id")
private Integer id;
@Column(nullable=false,name="Descricao")
private String descricao;
// Getters & Setters
// Equals & HashCode
}
Classe Pedido
// Imports necessários
@Entity
@Table(name="Pedidos")
public class Pedido implements java.io.Serializable {
@Id
@Column(name="Id",nullable=false)
private Integer id;
@ManyToOne
private Cliente cliente; // Classe Cliente - Salva o Cliente que efetuou a compra
@ManyToOne
private Funcionario funcionario; // Classe Funcionario - Salva o funcionario que realizou a venda
// Getters & Setters
// Equals & HashCode
}
Classe Itens Pedido FK (Contém a chave primária composta)
// Imports necessários
@Embeddable
public class ItensPedidoPK implements java.io.Serializable {
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="IdPedido")
@OnDelete(action=OnDeleteAction.CASCADE)
@Cascade(CascadeType.DELETE)
private Pedido pedido;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="IdProduto")
@OnDelete(action=OnDeleteAction.CASCADE)
@Cascade(CascadeType.DELETE)
private Produto produto;
// Getters & Setters
// Equals & HashCode
}
Classe ItensPedido (Classe onde será salvo os itens pedidos e a quantidade vendida)
// Imports necessários
@Entity
@Table(name="ItensPedidos")
public class ItensPedido implements java.io.Serializable {
private static final long serialVersionUID = Vars.VersionUID;
@EmbeddedId
private ItensPedidoPK itensPedidoPK;
@Column(nullable=false,name="PrecoUnitatio")
private BigDecimal precoUnitario;
@Column(nullable=false,name="Quantidade")
private Integer quantidade;
// Getters & Setters
// Equals & HashCode
}
Estes links também podem ajudar:
http://www.guj.com.br/java/214628-resolvidojpa-chave-primaria-composta-formada-por-chaves-estrangeiras-repetidas
http://www.guj.com.br/java/248978-resolvido-duvida-sobre-pk-e-erro-ao-inserir-no-banco-de-dados-usando-pk-gerado-pelo-netbeans
Espero ter ajudada a dar uma luz…
Abraços