Tenho uma aplicação desenvolvida em Java com Prime Faces e Hibernate, banco de dados MySql. Um dos programas é o lançamento de notas fiscais, onde o usuário informa os dados principais da nota sendo que depois de salvar estes dados o sistema libera uma aba para inserção dos itens. Nesta aba (de itens) tenho os dados do item e conforme o usuário manda salvar este item é salvo no banco 1 a 1 e a cada inseção, atualiza um DataTable. Toda vez que o item é salvo é chamado o método abaixo para atualizar a lista de Itens da Nota Fiscal.
@SuppressWarnings(“unchecked”)
public List listaItensPorNotaFiscal(Long codigoDaNotaFiscal) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
try {
Criteria consulta = sessao.createCriteria(ItemDaNotaFiscal.class);
consulta.add(Restrictions.eq(“notaFiscal.codigo”, codigoDaNotaFiscal));
List resultado = consulta.list();
return resultado;
} catch (RuntimeException erro) {
throw erro;
} finally {
sessao.close();
}
}
Abaixo segue o método que utilizo para salvar o item da nota.
public void merge(ItemDaNotaFiscal itemDaNotaFiscal, ItemDoAlmoxarifado itemDoAlmoxarifado, ItemDoPedido itemDoPedido, ValidadeLote validadeLote, MovimentacaoContabil movimentacaoContabil) {
Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
Transaction transacao = null;
try {
transacao = sessao.beginTransaction();
Long codigoItemDaNotaFiscal = (Long) sessao.save(itemDaNotaFiscal);
sessao.flush();
itemDaNotaFiscal = (ItemDaNotaFiscal) sessao.get(ItemDaNotaFiscal.class, codigoItemDaNotaFiscal);
if (itemDoAlmoxarifado != null) {
if (itemDoAlmoxarifado.getCodigo() == null) {
sessao.save(itemDoAlmoxarifado);
} else {
sessao.update(itemDoAlmoxarifado);
}
}
if (itemDoPedido != null) {
sessao.update(itemDoPedido);
}
if (validadeLote != null) {
if (validadeLote.getCodigo() == null) {
sessao.save(validadeLote);
} else {
sessao.update(validadeLote);
}
}
if (movimentacaoContabil != null) {
if(itemDaNotaFiscal.getNotaFiscal() != null && itemDaNotaFiscal.getNotaFiscal().getTipoDeOperacao() == 'S') {
movimentacaoContabil.setCentroDeCusto(null);
movimentacaoContabil.setSafra(null);
}
movimentacaoContabil.setItemDaNotaFiscal(itemDaNotaFiscal);
sessao.save(movimentacaoContabil);
}
transacao.commit();
} catch (Exception erro) {
if (transacao != null)
transacao.rollback();
throw erro;
} finally {
sessao.close();
}
}