Estou com um problema ao executar um SQL com um atributo de uma outra classe no Java, estou usando Hibernate.
public List<Produto> getProdutoPorSituacao(String stProduto){ String par = stProduto.toUpperCase(); Session sessao = HibernateUtil.getSession(); sessao.beginTransaction(); try{ return sessao.createQuery("from Produto where stProduto like '"+par+"' order by idProduto").list(); }catch (Exception e){ mensagem = TrataException.trataException(e); return null; }finally{ sessao.close(); } } public List<Produto> getProdutoPorMarca(String marca){ String par = marca.toUpperCase(); String sql = "from Produto prod left join Marca marc on marc.idMarca = prod.idMarca where marc.dsMarca like '%"+par+"%' order by idProduto"; Session sessao = HibernateUtil.getSession(); sessao.beginTransaction(); try{ return sessao.createSQLQuery(sql).list(); }catch (HibernateException e){ mensagem = TrataException.trataException(e); return null; }finally{ sessao.close(); } }
Este é o código, o primeiro trecho funciona normalmente, pois pega um atributo da propria classe Produto, já o outro dá o erro abaixo, pois pega um atributo de outra tabela.
org.hibernate.exception.SQLGrammarException: ERROR: syntax error at or near “from” Posição: 1 at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:122) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) at com.sun.proxy.$Proxy11.executeQuery(Unknown Source) at org.hibernate.loader.Loader.getResultSet(Loader.java:1962) at org.hibernate.loader.Loader.doQuery(Loader.java:829) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) at org.hibernate.loader.Loader.doList(Loader.java:2447) at org.hibernate.loader.Loader.doList(Loader.java:2433) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2263) at org.hibernate.loader.Loader.list(Loader.java:2258) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:331) at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1697) at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:227) at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156) at br.projeto.sistoque.controlador.ProdutoCon.getProdutoPorMarca(ProdutoCon.java:151) at br.projeto.sistoque.view.ProdutoForm.readJTableForMarca(ProdutoForm.java:112) at br.projeto.sistoque.view.ProdutoForm.btnPesquisarActionPerformed(ProdutoForm.java:425) at br.projeto.sistoque.view.ProdutoForm.access$800(ProdutoForm.java:18) at br.projeto.sistoque.view.ProdutoForm$9.actionPerformed(ProdutoForm.java:258) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Já fiz várias tentativas, mas nenhuma da certo…
Se alguém souber ficarei grato