Fórum Não deixar duplicar dados ao gravar no banco de dados via Hibernate. #512687
04/03/2015
0
de uma ajuda por favor estou fazendo um trabalho onde tenho um Jframe cadastro de clientes,
fiz o método para inserir dados no banco de dados que é mysql, porem não conseguir fazer com que
ao cadastrar verificar se não está duplicando dados, atraves do nome e cnpj.
esse é o meu código de cadastro:
private void btnCadastrarActionPerformed(java.awt.event.ActionEvent evt) {
// Botão Cadastrar responsável por enviar os dados do cliente para o banco.
//Valida os campos obriga o usuário a preencher os campos
if ((TXTcliente.getText().isEmpty()) || (TXTfantasia.getText().isEmpty()) || (TXTendereco.getText().isEmpty()) || (TXTn.getText().isEmpty()) || (TXTemail.getText().isEmpty()) || (TXTcidade.getText().isEmpty()) || (TXTbairro.getText().isEmpty()) || (TXTcontato.getText().isEmpty()) || (TXTfone.getText().isEmpty()) || (TXTcep.getText().isEmpty()) || (TXTcpf_cnpj.getText().isEmpty())) {
JOptionPane.showMessageDialog(null, "Os Campos com * são obrigatórios");
}
else {
Session s = Conexao.getSessionFactory().getCurrentSession(); //inicio da sessão do Hibernate
try {
s.beginTransaction();
Clientes c = new Clientes(); //classe da entidade do banco de dados
c.setRepresentantes((Representantes) TXTrepresentante.getSelectedItem()); //Quando busca dados de seleção no banco
c.setNomecli(TXTcliente.getText());
c.setNomefantasia(TXTfantasia.getText());
c.setEndereco(TXTendereco.getText());
c.setNumendereco(TXTn.getText());
c.setBairro(TXTbairro.getText());
c.setCep(TXTcep.getText());
c.setCidade(TXTcidade.getText());
c.setUf((String) TXTuf.getSelectedItem()); //Qando não busca dados no banco
c.setEmail(TXTemail.getText());
c.setTel(TXTfone.getText());
c.setTel2(TXTfone2.getText());
c.setContato(TXTcontato.getText());
c.setSituacao((String) TXTsituacao.getSelectedItem()); //Qando não busca dados no banco
c.setCpfCnpj(TXTcpf_cnpj.getText());
c.setInscrEstadual(TXTinsc_estadual.getText());
c.setObs(TXTobs.getText());
c.setLogin(TXTlogin.getText());
c.setSenha(TXTsenha.getText());
c.setInscMunicipal(TXTinsc_municipal.getText());
c.setDadoscoplementarcli(TXTdados.getText());
Date x = new Date();
c.setDatacadastrocli(x);
s.save(c);
s.getTransaction().commit();
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex.getMessage());
s.getTransaction().rollback();
}
// JOptionPane.showMessageDialog(null, "Cadastro inserido com sucesso..");
try {
this.PreencherTabela();
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
}
Jose Santos
Curtir tópico
+ 0Post mais votado
04/03/2015
Veja um exemplo:
//Antes do seu save
String hql = "from Clientes c where c.cpf = :cpf";
List result = session.createQuery(hql).setParameter("cpf", c.getCnpj()).list();
if (result.size() > 0){
throw new RuntimeException("CPF já existe");
}
s.save(c);
Ronaldo Lanhellas
Gostei + 1
Mais Posts
04/03/2015
Ronaldo Lanhellas
1 - Você pode colocar uma chave única do seu banco de dados para o campo CNPJ, assim ele nunca duplicará.
2 - A segunda forma é fazer uma busca pelo CNPJ antes de tentar salvar, se ele existir então você aborta mostrando uma mensagem de duplicidade.
Você ainda pode optar por usar as 2 formas, é ainda mais seguro.
Gostei + 0
04/03/2015
Ronaldo Lanhellas
1 - Você pode colocar uma chave única do seu banco de dados para o campo CNPJ, assim ele nunca duplicará.
2 - A segunda forma é fazer uma busca pelo CNPJ antes de tentar salvar, se ele existir então você aborta mostrando uma mensagem de duplicidade.
Você ainda pode optar por usar as 2 formas, é ainda mais seguro.
Gostei + 0
04/03/2015
Jose Santos
Como faco essa verificação para exibir a mensagem e abortar se houver os dados, eu fiz o campo ser no banco ser unique, me ajudou a não ter dados redundantes porem se não for pedir muito poderia me mostrar um exemplo por favor?
Obrigado pela atenção.
Gostei + 0
04/03/2015
Ronaldo Lanhellas
Veja um exemplo:
//Antes do seu save
String hql = "from Clientes c where c.cpf = :cpf";
List result = session.createQuery(hql).setParameter("cpf", c.getCnpj()).list();
if (result.size() > 0){
throw new RuntimeException("CPF já existe");
}
s.save(c);
Gostei + 1
05/03/2015
Jose Santos
Gostei + 0
07/03/2015
Ronaldo Lanhellas
Disponha.
Gostei + 0
08/02/2016
Sidnei Ferreira
Seu dica me ajudou bastante, muito obrigado!!
Não estou usando chave única, você acha que nesse caso existe algum risco?
Att., Sidnei
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)