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:
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.
public boolean existByName(Setor setor) {
entityManager.createQuery("SELECT s FROM Setor s WHERE s.nome = :nomeDoSetor");
entityManager.setParameter("nomeDoSetor", setor.getNome());
//Se a lista for maior que 0, então quer dizer que existe (true)
if(entityManager.getResultList().size() > 0) {
return true;
}
else {
return false;
}
}
if(setorDAO.existByName(setor)) {//Se já existe um setor
}
else {//Se não existe
}
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) {
String hql = "SELECT z FROM Setor z"
+ " WHERE z.nome='" + setor.getNome() + "'";
Setor verifica = this.dao.carregar(hql);
if (verifica == null) {
setor.setUsuarioAlteracao(Util.usuarioLogado());
setor.setDataCadastro(new Date());
setor.setDataAlteracao(new Date());
this.dao.salvar(setor);
Util.criarAviso("setor salvo com sucesso");
ok = true;
} else {
Util.criarAvisoErro("setor ja existe");
ok = false;
}
} else {
String hql = "SELECT z FROM Setor z"
+ " WHERE z.nome='" + setor.getNome() + "'"
+ " AND z.id!=" + setor.getId() + "";
Setor verifica = this.dao.carregar(hql);
if (verifica == null) {
setor.setUsuarioAlteracao(Util.usuarioLogado());
setor.setDataAlteracao(new Date());
this.dao.atualizar(setor);
Util.criarAviso("setor atualizado com sucesso");
ok = true;
} else {
Util.criarAvisoErro("setor ja existe");
ok = false;
}
}
} catch (Exception e) {
Util.criarAvisoErro("erro: " + e);
ok = false;
}
return ok;
}
public boolean excluir(Setor setor) {
boolean ok;
try {
this.dao.excluir(setor);
Util.criarAviso("setor excluido com sucesso");
ok = true;
} catch (Exception e) {
Util.criarAvisoErro("erro " + e);
ok = false;
}
return ok;
}
meu carregar hql está no setorDAO: @Override
public Setor carregar(String hql) {
return (Setor) this.sessao.createQuery(hql).setCacheable(true).uniqueResult();
}
botao do form onde eu insiro a funcao:
if (new SetorControlador().salvar(this.setor)) {
Setor nn = new Setor();
nn.setNome(setor.getText());
nn.setStatus(setor.getSelectedText());
nn.setDataCadastro(new Date());
DesktopNotify.showDesktopMessage("<<I N F O R M A Ç Ã O >>", "SETOR:\n" + setor.getText() + " \nGRAVADOS COM SUCESSO!!",
DesktopNotify.SUCCESS, 4000);
}
porem nao ta dando certo, onde eu estou errando? como implementar correto esses codigos?