Galera, tarde!
Estou com o seguinte problema.
Formula possui lista de Quantidade.
Porém as quantidades podem conter várias vezes o mesmo item.
Ordem de produção possui lista de Quantidades (outra classe).
Porém não podem duplicar os itens.
Logo se as quantidades na fórmula são repetidas eu as devo somar, para poder fazer uma quantidade única na produção.
Criei um método que me retorna uma lista de quantidades, porém ao salvar minha ordem de produção a minha formula é alterada também.
// Verificar Quantidade
Formula formulaDB = this.formulaDao.load(ordemProducao.getFormula().getId());
List<Quantidade> lstQuantidade = new ArrayList<Quantidade>();
//Metodo que traz as quantidades unificadas
this.getEstoque(formulaDB, lstQuantidade, ordemProducao.getQuantidadeSolicitada());
//Lista de quantidade da Ordem de Produção
List<OrdemPesagem> lstPesagens = new ArrayList<OrdemPesagem>();
for (Quantidade quantidade : lstQuantidade) {
if (!quantidade.getProdutoQuimico().isProdutoFaturado()) {
// Verificar os estoques válidos - CompraEntregaItem e a
// quantidade de cada item
List<CompraEntregaItem> estoques = this.materiaPrimaDao.estoqueValido(quantidade.getProdutoQuimico(), quantidade.getQuantia());
// Adicionar a lista as quantidade retornadas
for (CompraEntregaItem c : estoques) {
OrdemPesagem o = new OrdemPesagem();
o.setQuantidadeSolicitada(c.getQuantidadeOrdemProducao());
o.setCompraEntregaItem(c);
o.setDataSolicitada(Calendar.getInstance());
o.setOrdemProducao(ordemProducao);
o.setStatus(PesagemStatus.RESERVADA);
lstPesagens.add(o);
}
}
else {
// Quanto o produto é faturado, não é necessário verificar o
// estoque
OrdemPesagem o = new OrdemPesagem();
o.setQuantidadeSolicitada(quantidade.getQuantia());
o.setCompraEntregaItem(null);
o.setDataSolicitada(Calendar.getInstance());
o.setOrdemProducao(ordemProducao);
o.setStatus(PesagemStatus.RESERVADA);
lstPesagens.add(o);
}
}
// Criar Ordem de Produção
ordemProducao.setSolicitante(this.usuarioLogado.getUsuario());
ordemProducao.setFormula(formulaDB);
ordemProducao.setPesagens(lstPesagens);
this.ordemProducaoDao.save(ordemProducao);
this.result.include("sucesso", true);
this.result.redirectTo(this).listar();
Verificando minhas classes, a ordem de produção, não tem relacionamento com a Formula_Quantidade (Classe: Quantidade)
Logo, não consegui identificar porque está salvando ela em cascade.
A única ligação está aqui, mas mesmo assim eu não relacionei nada em cascade.
@Entity
@DiscriminatorValue("BASE")
public class OrdemProducaoBase extends OrdemProducao{
@ManyToOne(optional = true)
private Formula formula;
