Insert Dados Hibernate

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)

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.

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:

[code] public void salva(Filme filme) {
Transaction transaction = session.beginTransaction();

	session.save(filme);

	transaction.commit();
	session.close();
}[/code]Abraço.

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:

[quote]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:
[/quote]

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.

vc ta fazendo errado ainda…
tenta fazer assim:

[code]
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();  
}  [/code]

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