Insert Dados Hibernate

6 respostas
montovani

Ola galera beleza?

Pessoal precisei fazer uma inserção no banco mais personalizada e fui utilizar o HQL, so que estou apanhando aqui e gostaria do entendimento de vocês. Verifiquei em alguns tutoriais que com HQL nao existe o INSERT INTO VALUES … mas sim INSERT INTO … SELECT… bem a duvida e o problema e que quando estou inserindo ele não esta encontrando alguns paramentros meu. Verifique neste tutorial que e preciso colocar um nome de um objeto no INSERT e OUTRO objeto no SELECT… bem gostaria de saber como e isto? Preciso criar outra tabela para inserir uma… ou seja com o HQL vou precisa de a cada inserção criar duas tabelas? Bem no tutorial ta falando de OBJETO, mas se o objeto e quem esta fazendo a persistencia… bem não to entendendo… :?: :cry: :frowning: . Bem segue abaixo o codigo que estou tentando e o erro que esta sendo gerado.

CODIGO

public  void salva(Filmes filme) {
         Transaction tx = session.beginTransaction();

         String query = "insert into Filmes (idfilme, idredeshopping, "
                 + "taxaservico, idfilmes) select f.idfilme,f.idredeshopping,f.taxaservico,f.idfilmes from Filmes f";
         Query q = session.createQuery(query)
                 .setParameter("idfilme", filme.getIdfilme())
                 .setParameter("idredeshopping", filme.getIdredeshopping())
                 .setParameter("taxaservico", filme.getTaxaservico())                 
                 .setParameter("idfilmes", filme.getIdfilmes());
         q.executeUpdate();
         tx.commit();
    }

ERRO GERADO

INFO: Not binding factory to JNDI, no JNDI name configured
Exception occurred during event dispatching:
org.hibernate.QueryParameterException: could not locate named parameter [idfilme]
        at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:75)
        at org.hibernate.engine.query.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:81)
        at org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.java:413)
        at org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:383)
        at conexao.FilmesDAO.salva(FilmesDAO.java:192)
        at gerenteingresso.Filme.processaDados(Filme.java:1532)
        at gerenteingresso.Filme.jBProcessarFilmeActionPerformed(Filme.java:1413)
        at gerenteingresso.Filme.access$2600(Filme.java:31)
        at gerenteingresso.Filme$30.actionPerformed(Filme.java:897)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
        at java.awt.Dialog$1.run(Dialog.java:1046)
        at java.awt.Dialog$3.run(Dialog.java:1098)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:1096)
        at java.awt.Component.show(Component.java:1563)
        at java.awt.Component.setVisible(Component.java:1515)
        at java.awt.Window.setVisible(Window.java:842)
        at java.awt.Dialog.setVisible(Dialog.java:986)
        at gerenteingresso.Filme$31.run(Filme.java:2063)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

6 Respostas

alves.Felipe

VC esta querendo inserir na tabela Filmes tudo que já tem na tabela Filmes??? estranho…
cara… acontece que vc não esta passando nenhum parametro… arranca aqueles setParameter e provavelmente vai funcionar
crie uma clausula WHERE no seu select e passe aqueles parametros que vc esta setando no setParameter.

isaiaspf

Opa.

Cara, eu não entedi porque você está usando um hql para inserir o registro no banco. Você pode salvar de forma mais simples fazendo assim:
public void salva(Filme filme) {
		Transaction transaction = session.beginTransaction();

		session.save(filme);

		transaction.commit();
		session.close();
	}
Abraço.
montovani

alves.Felipe

Não na verdade eu estou querendo incluir dados na tabela Filmes, so que eu não estou entendo com fazer no insert isto. Em alguns tutorial dizia que o nome da tabela no Select era outro… agora porque não sei dizer. E isto que to apanhando.

Cara fiz o que falou… agora nao da erro, mas tambem nao inclui nada no banco… ta muito estranho. Veja como deixei agora.

public  void salva(Filmes filme) {
         Transaction tx = session.beginTransaction();

         String query = "insert into Filmes (idfilmes,idredeshopping,idfilme,taxaservico) "
                 + "select idfilmes,idredeshopping,idfilme,taxaservico from Filmes where idfilmes="+filme.getIdfilmes()+" "
                 + "and idredeshopping="+filme.getIdredeshopping()+" and idfilme="+filme.getIdfilme()+" "
                 + "and taxaservico="+filme.getTaxaservico();
         System.out.println(query);
            Query q = session.createQuery(query);
         q.executeUpdate();
         tx.commit();
    }

Obrigado desde ja pela força. :smiley:

montovani

isaiaspf
Opa.

Cara, eu não entedi porque você está usando um hql para inserir o registro no banco.
Você pode salvar de forma mais simples fazendo assim:

Cara… beleza eu sei… mas to precisando porque tenho um campo de data e hora que vou ter que manipula-lo. Primeiro estou tentando inserir um registro no banco usando o HQL para depois passar para a manipulação do timestamp. Valeu obrigado.

alves.Felipe
vc ta fazendo errado ainda.. tenta fazer assim:
public  void salva(Filmes filme) {  
         Transaction tx = session.beginTransaction();  
      
         String query = "insert into Filmes (idfilmes,idredeshopping,idfilme,taxaservico) "  
                 + "select idfilmes,idredeshopping,idfilme,taxaservico from Filmes where idfilmes=:idFilmes " 
                 + "and idredeshopping=:idredeshopping  and idfilme=:idfilme "
                 + "and taxaservico=:taxaservico";  
         System.out.println(query);  
            Query q = session.createQuery(query)
             .setParameter("idFilmes", filme.getIdfilmes())
             .setParameter("idredeshopping", filme.getIdredeshopping())  
             .setParameter("idfilme", filme.getIdfilme())  
             .setParameter("taxaservico", filme.getTaxaservico())             
             ;    
         q.executeUpdate();  
         tx.commit();  
    }
montovani

Valeu Felipe… Deu certo… Valeu brigadão. Abraços inte.

Criado 12 de julho de 2011
Ultima resposta 12 de jul. de 2011
Respostas 6
Participantes 3