Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Padrão para regra de negócio

Boa tarde senhores! Tudo bem?

Possuo a seguinte dúvida com relação a uma regra de negócio, que estou tentando implementar na minha aplicação JSF:

Vamos supor que eu tenho 3 Entidades, Projeto, Despesa, e NotaFiscal, que possuem relacionamentos bidirecionais da forma que, um Projeto possui muitas Despesa, e uma Despesa possui muitas NotaFiscal (OneToMany e ManyToOne).

Nós aqui fazemos o cadastro de um Projeto, e das Despesa desse projeto, e nosso cliente vai cadastrando NotaFiscal dentro de cada Despesa que nós havíamos criado. Despesa possui um atributo valorOrcado (BigDecimal), que é definido no momento de sua criação, e Projeto possui um atributo orcadoTotal (BigDecimal), que é o valor da soma do atributo 'valorOrcado' de todas as Despesa do projeto.

Da mesma forma, NotaFiscal possui um atributo valorTotal, Despesa possui um atributo valorReal (soma do atributo anterior de todas as NotaFiscal) e Projeto possui um atributo realTotal, que é a soma dos valorReal de todas as Despesa.

Gostaria de saber qual seria a melhor forma de passar esses valores para Projeto, já que haveria um p:dataTable demonstrando todos eles com seus respectivos valores. Pensei em atualizar esses valores, de totalOrcado e totalReal somente quando uma Despesa, ou NotaFiscal é gravada no banco de dados, atualizando esses valores do Projeto. Meu receio é que de alguma forma o método de gravar somente insira os dados no banco mas se perca na hora de atualizar Projeto. A primeira abordagem que imaginei, foi na hora de acessar a tabela de Projeto, que ele buscasse esses valores nas classes filhas, mas seria loucura a quantidade de queries realizadas para cada projeto, para cada despesa, e para cada nota fiscal, afetaria com certeza o desempenho da aplicação.

Alguma dica?

2 respostas
solução!

voce pode atualizar no projeto, nao acho ruim. Outra solucao eh escrever uma query que ja traga uma lista de objetos toda montada, para vc exibir facil na datatable.

Por enquanto vou atualizar no projeto no momento de gravar a despesa (aí atualiza da filha até a primária). Ótima sugestão com relação a utilizar uma query pra trazer a soma, mas quero estudar a CriteriaQuery para abstrair totalmente o SQL do meu código (receio absurdo de injection hehe).