Não deixar duplicar dados ao gravar no banco de dados via Hibernate.
Boa Tarde Pessoal
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());
}
}
}
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
Curtidas 0
Melhor post
Ronaldo Lanhellas
04/03/2015
Só pelo fato de ter a chave única no banco já lhe garante 90% do que você precisa, a única coisa que falta é tratar isso antes de tentar salvar:
Veja um exemplo:
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
Mais Respostas
Ronaldo Lanhellas
04/03/2015
Mas você está salvando direto sem antes consultar se o CNPJ existe, desta forma não vai checar duplicidade mesmo. Existem 2 formas de fazer isso:
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.
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
Ronaldo Lanhellas
04/03/2015
Mas você está salvando direto sem antes consultar se o CNPJ existe, desta forma não vai checar duplicidade mesmo. Existem 2 formas de fazer isso:
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.
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
Jose Santos
04/03/2015
Obrigado pela dica Ronaldo.
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.
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
Ronaldo Lanhellas
04/03/2015
Só pelo fato de ter a chave única no banco já lhe garante 90% do que você precisa, a única coisa que falta é tratar isso antes de tentar salvar:
Veja um exemplo:
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
Jose Santos
04/03/2015
Muito obrigado Ronaldo Funcionou certinho.
GOSTEI 0
Ronaldo Lanhellas
04/03/2015
Muito obrigado Ronaldo Funcionou certinho.
Disponha.
GOSTEI 0
Sidnei Ferreira
04/03/2015
Ronaldo,
Seu dica me ajudou bastante, muito obrigado!!
Não estou usando chave única, você acha que nesse caso existe algum risco?
Att., Sidnei
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