[Resolvido]Consulta like JPA erro:

Pessoal, fiz esse metodo para retornar nomes que iniciam com o que for preenchido na variável “nome”. ( a consulta está certa?)

Só que está retornando o erro abaixo.

[code]public List consultaAlternativa(String nome){
EntityManager em = getEntityManager();
Query q = em.createQuery(“Select e from estoque e WHERE e.nome like’”+ nome +"%’");
return (List) q.getResultList();

}[/code]

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: Exception Description: Error compiling the query [Select e from estoque e WHERE e.nome like'on%']. Unknown entity type [estoque]. at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1328) at gerenciador.JPA.exceptions.EstoqueJpaController.consultaAlternativa(EstoqueJpaController.java:140) at gerenciador.FrameEstoque.bt_PesquisarActionPerformed(FrameEstoque.java:339) at gerenciador.FrameEstoque.access$900(FrameEstoque.java:24) at gerenciador.FrameEstoque$10.actionPerformed(FrameEstoque.java:245) 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.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) Caused by: Exception [EclipseLink-8034] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.JPQLException Exception Description: Error compiling the query [Select e from estoque e WHERE e.nome like'on%']. Unknown entity type [estoque]. at org.eclipse.persistence.exceptions.JPQLException.entityTypeNotFound(JPQLException.java:483) at org.eclipse.persistence.internal.jpa.parsing.ParseTreeContext.classForSchemaName(ParseTreeContext.java:138) at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getClassOfFirstVariable(SelectNode.java:327) at org.eclipse.persistence.internal.jpa.parsing.SelectNode.getReferenceClass(SelectNode.java:316) at org.eclipse.persistence.internal.jpa.parsing.ParseTree.getReferenceClass(ParseTree.java:439) at org.eclipse.persistence.internal.jpa.parsing.ParseTree.adjustReferenceClassForQuery(ParseTree.java:79) at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateReadQueryInternal(JPQLParseTree.java:103) at org.eclipse.persistence.internal.jpa.parsing.JPQLParseTree.populateQuery(JPQLParseTree.java:84) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:202) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:173) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:125) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:109) at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1326) ... 29 more

Ou da pra fazer tudo pelo NamedQuery,?? só que a consulta a baixo não funcionou.

Se estiver usando Hibernate,dá pra usar a api de Criteria:

crit.add(Restrictions.ilike("nome", nome,MatchMode.START));

Coloque o nome da classe “estoque” em letra maiúscula e dê um espaço depois do like:
Select e from Estoque e WHERE e.nome like ‘"+ nome +"%’"

[quote=apferreira]Coloque o nome da classe “estoque” em letra maiúscula e dê um espaço depois do like:
Select e from Estoque e WHERE e.nome like ‘"+ nome +"%’" [/quote]

o nome da entidade tem que ser igualzinha na query hqp/jpql… assim como o colega acima falou!!

Valeu.

Galera com fazer uma pesquisa usando criteria like??
a pesquisa seria essa, ele funciona normalmente só precisaria transformar em um
método genérico.

	public List<Usuario> listarUsuarioLikeNome(String texto) {
		sessao = HibernateUtil.currentSession();
		tx = sessao.beginTransaction();

		Criteria criteira = sessao.createCriteria(Usuario.class).add(
				Restrictions.ilike("nome", "texto%"));

		List<Usuario> resultados = criteira.list();

		if (resultados == null) {
			JOptionPane.showMessageDialog(null, "Nenhum registro encontrado!");
		}

		sessao.close();

		return resultados;
	}