eaiiii Gennnnte rs , estou implementando uma aplicação CRUD onde aprende conceitos de DAO e MVC agora estou utilizando o Hibernate (da hora vey )
porém estou com muitas duvidas em algumas opeções por exemplo na consulta usando o FIND como eu faço para passa outro campo que não seja o ID ? se eu colocar um Index na associado a coluna eu posso usar no FIND ?
Onde está a classe CadCliente?
Todas as classes que você mapeou com a annotation @Entity devem ser listadas como uma
franz_Ozil
ah beleza então Cadcliente foi o nome dado na criação da tabela no banco de dados minha classe e a Cliente , esse criteria , e um criterio de comandos ? meu objetivo e fazer as operações utilizando o campo RG
drsmachado
Bom, como a tabela tem o nome CadCliente, creio que a classe que a representa é a classe Cliente, certo?
Então, precisa adicionar a annotation @Table
Criteria é uma parte da API do Hibernate que, ao meu ver, é muito mais elegante que HQL.
franz_Ozil
tipo assim cara ?
achei este exemplo
Queryquery=em.createQuery("DELETE FROM Country c WHERE c.population < :p");intdeletedCount=query.setParameter(p,100000).executeUpdate();
no meu caso ficaria assim
?
Queryquery=transacao.createQuery("delete from cadcliente c where c.RG =':p'");intdeletedCount=query.setParameter(conscli.rg,jan.txtRg.getText()).executeUpdate();
drsmachado
Isso aí é HQL.
Agora, perceba que você não conhece o banco de dados, não sabe nem qual é a tabela (mentirinha) que está armazenando os dados do Cliente.
Para a consulta, você deve fazer de conta que só sabe que quer todos os clientes onde o RG = ao que você passar.
Como você não sabe o nome da tabela, mas sabe o nome da classe, troque cadcliente pelo nome da classe e veja a mágica acontecer.
franz_Ozil
hahah eu sei sim vey
Queryquery=transacao.createQuery("delete from "+Cliente.class+" c where c.RG ='"+jan.txtRg.getText()+"'");intdeletedCount=query.setParameter(conscli.rg,jan.txtRg.getText()).executeUpdate();
entendi , List <> coleção de dados neh , agora sim você fez a consulta verificou se existe preenche o objeto da classe e depois removeu foi isso ?
drsmachado
Não.
Uma coisa de cada vez.
Se você pretende primeiro buscar, use o método de busca (tanto faz uniqueResult ou list, de acordo com o número de resultados esperados).
Feito isso, invoque o método remove, que é um método do EntityManager e que recebe como parâmetro o objeto que se deseja remover.
franz_Ozil
O uniqueResult(); não aparece aqui não cara , este Query faz parte do pesistence ou de outra biblioteca ?
drsmachado
da Query…
franz_Ozil
Fiz o Seguinte man :
Queryquery=(Query)transacao.createQuery("select * from "+Cliente.class.getSimpleName()+" c where c.rg ='"+jan.txtRg.getText()+"'");conscli=(Cliente)query.uniqueResult();//Query query =transacao.createQuery("delete from Cliente c where c.rg ='"+jan.txtRg.getText()+"'");if(conscli!=null){transacao.getTransaction().begin();((EntityManager)transacao).remove(conscli);transacao.getTransaction().commit();JOptionPane.showConfirmDialog(null,"sucesso");}else{JOptionPane.showConfirmDialog(null,"falhou");}}catch(Exceptione){e.printStackTrace();JOptionPane.showConfirmDialog(null,e.getMessage());}
porém ainda não deu certo (negocio tenso )
mais ta quase la
exception
transacao.getTransaction().begin();Queryquery=transacao.createQuery("select c.rg from Cliete c where c.rg =:rg ");query.setParameter("rg",jan.txtRg.getText());query.executeUpdate();conscli=(Cliente)query.getSingleResult();
franz_Ozil
o erro estava ocorrendo porque eu ainda não havia iniciado a transação no gettransaction().begin();
agora esta funcionando (Y)