Comparar dados antes de gravar e atualizar javaee/jsf
7 respostas
programaçãojsfjava
S
ssi363
Ola. Preciso deum auxilio. Estou estudando jsf e estou desenvolvolveno uma aplicação para fins de estudo mesmo. A questao é a seguinte. Ante de gravar no banco de dados, a aplcação analise o seguinte:
Ao salvar, verifica antes se o nome do setor já exista no banco de dados (postgres), senão existir, grave, senao nao permita;
Ao atualizar, tbem execute a mesma analise e atualize os dados, se alterar o nome, tem que analisar se este nome já existe no banco de dados pra nao salvar repetido.
Data de cadastro deve ser em ao salvar e e data de alteração tem que ser em atualizar.
Arquivo entidade:
Faz uma query e verifique se existe.
Caso você não saiba, o entityManager tem um método chamado createQuery, você pode usa-lo para checar
Mesma lógica que o de cima
S
ssi363
Mike, peço desculpas, pois estou inicianto, mas mas voce teria um exemplo de como fazer? Tem mais um detalhe, quando atualizar, onde eu colocaria o “setor.setDataAlteracao(new Date());”, pos se eu colacar no metodo salvar ele irá atualizar o :“setor.setDataCadastro(new Date());” tamem, e ao seria interressante , já que dataalteracao será diferente da datacadastro.
Explicando: Como você chama o método editar ao selecionar um setor em um grid, provavelmente a dataCadasto virá do banco também, então, você só irá setar a data quando esta for nula, no caso, quando for inserir um novo setor.
D
Diego_Emmanuell
Acredito que se você definir o id como sendo o nome do setor resolveria o problema.
M
Mike
Se você não quer setar o valor, só não setar
publicbooleanexistByName(Setorsetor){
entityManager.createQuery("SELECT s FROM Setor s WHERE s.nome = :nomeDoSetor");entityManager.setParameter("nomeDoSetor",setor.getNome());//Sealistaformaiorque0,entãoquerdizerqueexiste(true)if(entityManager.getResultList().size()>0){
returntrue;}
else{
returnfalse;}
}
Tem como trocar esse entityManager por hql?? Como seria em hql?
S
ssi363
Achei esse codigo na net e estou tentando nplementa-lo no meu projeto, porem ele cai direto na ultima linha do odigo onde esta " Util.criarAvisoErro(“erro " + e);”
meu controlador:
public boolean salvar(Setor setor) {
boolean ok;
try {
if (setor.getId() == null) {
Stringhql="SELECT z FROM Setor z"+" WHERE z.nome='"+setor.getNome()+"'";Setorverifica=this.dao.carregar(hql);if(verifica==null){setor.setUsuarioAlteracao(Util.usuarioLogado());setor.setDataCadastro(newDate());setor.setDataAlteracao(newDate());this.dao.salvar(setor);Util.criarAviso("setor salvo com sucesso");ok=true;}else{Util.criarAvisoErro("setor ja existe");ok=false;}}else{Stringhql="SELECT z FROM Setor z"+" WHERE z.nome='"+setor.getNome()+"'"+" AND z.id!="+setor.getId()+"";Setorverifica=this.dao.carregar(hql);if(verifica==null){setor.setUsuarioAlteracao(Util.usuarioLogado());setor.setDataAlteracao(newDate());this.dao.atualizar(setor);Util.criarAviso("setor atualizado com sucesso");ok=true;}else{Util.criarAvisoErro("setor ja existe");ok=false;}}}catch(Exceptione){Util.criarAvisoErro("erro: "+e);ok=false;}returnok;}publicbooleanexcluir(Setorsetor){booleanok;try{this.dao.excluir(setor);Util.criarAviso("setor excluido com sucesso");ok=true;}catch(Exceptione){Util.criarAvisoErro("erro "+e);ok=false;}returnok;}
meu carregar hql está no setorDAO: @Override
public Setor carregar(String hql) {
return (Setor) this.sessao.createQuery(hql).setCacheable(true).uniqueResult();
}