Não consigo pesquisar por nome?

16 respostas
E

Fala galera, peço ajuda para conseguir pesquisar por nome, pelo código da certo, mas pelo nome estou com dificuldades...

consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){



							if(!nome_cli.getText().trim().equals("")){
								
						     EntityManager em = f.createEntityManager();

							cliente_locadora d = new cliente_locadora();
							d.getNome_cli();
							
					        //
					        // <<<<<< Localizando o Registro no Banco = FIND >>>>>
					        //
							d = em.find(cliente_locadora.class, (nome_cli.getText()));
							
							
							if (d != null){
							
								 
						    rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getCelular());
							
							
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   }
						}

dá o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at views.CopyOfBuscaCliente$1.actionPerformed(CopyOfBuscaCliente.java:108)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Agradeço a ajuda...

16 Respostas

tnaires

O método find do EntityManager só permite recuperar um objeto a partir de sua chave primária. Não é possível usá-lo para recuperar o cliente pelo nome.
Você terá que escrever uma consulta JPQL para isso:

String jpql = "SELECT c FROM Cliente c WHERE c.nomeCliente = :nomeCliente";

Aí então você cria uma Query e a executa:

Query q = em.createQuery(jpql); q.setParameter("nomeCliente", nomeCliente); List<?> resultados = q.getResultList();

HI7M4N

Eu não saco muito ainda mas essa Exception “NullPointerException” , ocorre quando vc tenta passar o valor de uma variável que tem seu valor null.

vc até colocou um if ali testando se ela é null ou não, mas essa não é a melhor forma de se fazer isso. Eu não sei se posso postar links de outro forum aqui (sou novo nesse forum) mas faz uma busca no goolge por esse Exception que vc vai encontrar a forma correta de fazer esse teste.

HI7M4N

Achei esse tópico aqui no fórum…

http://www.guj.com.br/posts/list/29142.java

E

Ola, desde já agradeço, dá uma olhada no código, deu um erro

consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){



						if(!nome_cli.getText().trim().equals("")){
								
						     EntityManager em = f.createEntityManager();

							cliente_locadora d = new cliente_locadora();
							
							 
							
							List<cliente_locadora> cliente = new ArrayList<cliente_locadora>();
					      
						
							StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cli = :"+ nome_cli);

							
							Query q = em.createQuery(jpql.toString());   
							q.setParameter("nome_cli", nome_cli);   
							List<cliente_locadora> resultados = q.getResultList();  
							
							
							if (nome_cli != null && !nome_cli.equals("")) {
							
								 
						    rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getCelular());
							
							
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   
						}
						}

Segue o erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at views.CopyOfBuscaCliente$1.actionPerformed(CopyOfBuscaCliente.java:111)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
nel

Bom dia.

Deves ficar atento ao erro que ocorre, a exception especificamente. NullPointerException, ou seja, em alguma linha do seu código está tentando acessar um valor/objeto cuja referência dele é nula ou o valor de forma que lança essa Exception. O seu stacktrace aponta para, a princípio, neste pacote e método: views.CopyOfBuscaCliente$1.actionPerformed(CopyOfBuscaCliente.java:111)

Mais um detalhe, em JPA não se concatena o valor na query e depois seta o valor na query como parametro, arrume esta linha:

StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cli = :nome_cli");

Lembrando que o parametro deve estar obrigatoriamente “colado” aos ‘:’ e também o nome do parametro deve ser exatamente igual ao que você seta na query, ou seja:

//esta parte está correta q.setParameter("nome_cli", nome_cli);

É isso, verifique onde está acessando/recebendo um valor nulo e arrume a linha da sua Query.
Abraços.

E

Galera, dei uma mudada no codigo seguindo o conselho do amigo sobre java Null exceptio, mas deu um outro erro.

package views;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

import Beans.cliente_locadora;
import Beans.reserva_locadora;


	@SuppressWarnings("serial")
	public class CopyOfBuscaCliente extends JFrame{ 

		
		JLabel rotulo1, rotulo3, rotulo4, rotulo5;
	   	JButton  consultar;		   	
	    JTextField nome_cli; 
		
		
		private static EntityManagerFactory f = null;

		public CopyOfBuscaCliente(EntityManagerFactory f1){
		
			super("LOCADORA YASMIN"); 
			getContentPane().setForeground(new Color(30, 144, 255));
			getContentPane().setLayout(null);
			Container tela = getContentPane(); 
			setLayout(null);
			
			
			f=f1;
			
			
			tela.setBackground(new Color(181,181,181));
		
			rotulo1 = new JLabel ("Nome:");
	   		rotulo1.setBounds(10, 50, 110, 30);
	   		rotulo3 = new JLabel ("Código do cliente:");
	   		rotulo3.setBounds(10, 101, 150, 30);
	   		rotulo4 = new JLabel ("Celular:");
	   		rotulo4.setBounds(181, 156, 110, 30);
	   		rotulo5 = new JLabel ("Fone:");
	   		rotulo5.setBounds(10, 156, 110, 30);
	   		
	   		
	   		nome_cli = new JTextField (5);
	   		nome_cli.setBounds(67, 53, 142, 25);
	   		
	   		
	   		consultar = new JButton ("Consultar");
	   		consultar.setBounds(235, 54, 90, 23);
	   		
	   		
	   		
	   		
	   		
	   		
	   			   		
	   		tela.add(rotulo1);
	   		tela.add(rotulo3);
	   		tela.add(rotulo4);
	   		tela.add(rotulo5);
	   		
	   		
	   		tela.add(nome_cli);
	   		
	   		
	   		
	   		tela.add(consultar);

//	   	 DESABILITAM-SE ALGUNS BOTÕES 
		
	   	
			consultar.setEnabled(true);

			setSize(360, 309);
			setVisible(true);
			setLocationRelativeTo(null);// CENTRALIZA A JANELA 

	   	

//	 Ações Botões
	
		
			
			consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){

							

						if(!nome_cli.getText().trim().equals("")){
								
						    

							cliente_locadora d = new cliente_locadora();
							
							 
							
							List<cliente_locadora> cliente = new ArrayList<cliente_locadora>();
					      
						
							StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cli = :"+ nome_cli);

							 EntityManager em = f.createEntityManager();
							 
							Query q = em.createQuery(jpql.toString());   
							q.setParameter("nome_cli", nome_cli);   
							List<cliente_locadora> resultados = q.getResultList();  
							
							
							if (nome_cli != null && !nome_cli.equals("")) {
							
								 
						    rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getCelular());
							
							
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   
						}
						}
						public void focusGained(final FocusEvent arg0) {
							// TODO Auto-generated method stub
							
						}

					} // fim do new ActionListener
			);

			
			
			
			
		
			
				
		
		}
			
	
		}

Segue o erro

- Hibernate Annotations 3.3.0.GA
- Hibernate 3.2.5
- hibernate.properties not found
- Bytecode provider name : cglib
- using JDK 1.4 java.sql.Timestamp handling
- Hibernate EntityManager 3.3.1.GA
- Binding entity from annotated class: Beans.cliente_locadora
- Bind entity Beans.cliente_locadora on table cliente_locadora
- Binding entity from annotated class: Beans.funcionario_locadora
- Bind entity Beans.funcionario_locadora on table funcionario_locadora
- Binding entity from annotated class: Beans.filme_locadora
- Bind entity Beans.filme_locadora on table filme_locadora
- Binding entity from annotated class: Beans.locacao_locadora
- Bind entity Beans.locacao_locadora on table locacao_locadora
- Binding entity from annotated class: Beans.devolver_filme
- Bind entity Beans.devolver_filme on table devolver_filme
- Binding entity from annotated class: Beans.reserva_locadora
- Bind entity Beans.reserva_locadora on table reserva_locadora
- Hibernate Validator 3.0.0.GA
- Using Hibernate built-in connection pool (not for production use!)
- Hibernate connection pool size: 20
- autocommit mode: true
- using driver: oracle.jdbc.OracleDriver at URL: jdbc:oracle:thin:@127.0.0.1:1521
- connection properties: {user=system, password=****, autocommit=true, release_mode=auto}
- RDBMS: Oracle, version: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
- JDBC driver: Oracle JDBC driver, version: 10.2.0.1.0XE
- Using dialect: org.hibernate.dialect.Oracle9Dialect
- The Oracle9Dialect dialect has been deprecated; use either Oracle9iDialect or Oracle10gDialect instead
- Transaction strategy: org.hibernate.transaction.JDBCTransactionFactory
- No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
- Automatic flush during beforeCompletion(): disabled
- Automatic session close at end of transaction: disabled
- JDBC batch size: 15
- JDBC batch updates for versioned data: disabled
- Scrollable result sets: enabled
- JDBC3 getGeneratedKeys(): disabled
- Connection release mode: auto
- Maximum outer join fetch depth: 3
- Default batch fetch size: 1
- Generate SQL with comments: disabled
- Order SQL updates by primary key: disabled
- Order SQL inserts for batching: disabled
- Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
- Using ASTQueryTranslatorFactory
- Query language substitutions: {}
- JPA-QL strict compliance: enabled
- Second-level cache: enabled
- Query cache: disabled
- Cache provider: org.hibernate.cache.NoCacheProvider
- Optimize cache for minimal puts: disabled
- Structured second-level cache entries: disabled
- Statistics: disabled
- Deleted entity synthetic identifier rollback: disabled
- Default entity-mode: pojo
- Named query checking : enabled
- building session factory
- Not binding factory to JNDI, no JNDI name configured
- Running hbm2ddl schema update
- fetching database metadata
- updating schema
- table found: SYSTEM.CLIENTE_LOCADORA
- columns: [dep_nome, data_exp, orgao_exp, nome_cli, datanascimento, rg, profissao, cpf, fone_residencial, cod_cli, fone_comercial, celular]
- foreign keys: []
- indexes: [sys_c007507]
- table found: SYSTEM.DEVOLVER_FILME
- columns: [nome_func, data_loc, cod_filme, dependente, titulo, nome_cli, devolvido, valor_loc, data_prevista, cod_loc, cod_cli, cod_func]
- foreign keys: []
- indexes: [sys_c007514]
- table found: SYSTEM.FILME_LOCADORA
- columns: [cod_filme, duracao, titulo, midia, genero, tema, ano, qtde_total, faixa_preco]
- foreign keys: []
- indexes: [sys_c007517]
- table found: SYSTEM.FUNCIONARIO_LOCADORA
- columns: [nome_func, dat_nasc, uf, sexo, rg, senha, cod_func, bairro, cidade, cep, telefone, cpf, login, conf_senha, end, celular]
- foreign keys: []
- indexes: [sys_c007519]
- table found: SYSTEM.LOCACAO_LOCADORA
- columns: [data_loc, cod_filme, desconto, titulo, quantidade, valor, data_devolucao, data_prevista, cod_cli, cod_loc]
- foreign keys: []
- indexes: [sys_c007524]
- table found: SYSTEM.RESERVA_LOCADORA
- columns: [id, reservar_para, cod_filme, cod_reserva, obs_reserva, cod_cli, cod_fuc]
- foreign keys: []
- indexes: [sys_c007529]
- schema update complete
- line 1:83: unexpected token: ,
- line 1:86: expecting CLOSE_BRACKET, found ','
- line 1:89: unexpected token: ,
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.QueryException: unexpected char: '@' [SELECT c FROM Beans.cliente_locadora c WHERE c.nome_cli = :javax.swing.JTextField[,67,53,142x25,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1e1962d,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=5,columnWidth=0,command=,horizontalAlignment=LEADING]]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:617)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)
	at views.CopyOfBuscaCliente$1.actionPerformed(CopyOfBuscaCliente.java:124)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hibernate.QueryException: unexpected char: '@' [SELECT c FROM Beans.cliente_locadora c WHERE c.nome_cli = :javax.swing.JTextField[,67,53,142x25,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@1e1962d,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=5,columnWidth=0,command=,horizontalAlignment=LEADING]]
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:204)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
	... 26 more
E

Fiz as alterações que o amigo Nel me ajudou, deu uma mudado no erro

package views;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

import Beans.cliente_locadora;
import Beans.reserva_locadora;


	@SuppressWarnings("serial")
	public class CopyOfBuscaCliente extends JFrame{ 

		
		JLabel rotulo1, rotulo3, rotulo4, rotulo5;
	   	JButton  consultar;		   	
	    JTextField nome_cli; 
		
		
		private static EntityManagerFactory f = null;

		public CopyOfBuscaCliente(EntityManagerFactory f1){
		
			super("LOCADORA YASMIN"); 
			getContentPane().setForeground(new Color(30, 144, 255));
			getContentPane().setLayout(null);
			Container tela = getContentPane(); 
			setLayout(null);
			
			
			f=f1;
			
			
			tela.setBackground(new Color(181,181,181));
		
			rotulo1 = new JLabel ("Nome:");
	   		rotulo1.setBounds(10, 50, 110, 30);
	   		rotulo3 = new JLabel ("Código do cliente:");
	   		rotulo3.setBounds(10, 101, 150, 30);
	   		rotulo4 = new JLabel ("Celular:");
	   		rotulo4.setBounds(181, 156, 110, 30);
	   		rotulo5 = new JLabel ("Fone:");
	   		rotulo5.setBounds(10, 156, 110, 30);
	   		
	   		
	   		nome_cli = new JTextField (5);
	   		nome_cli.setBounds(67, 53, 142, 25);
	   		
	   		
	   		consultar = new JButton ("Consultar");
	   		consultar.setBounds(235, 54, 90, 23);
	   		
	   		
	   		
	   		
	   		
	   		
	   			   		
	   		tela.add(rotulo1);
	   		tela.add(rotulo3);
	   		tela.add(rotulo4);
	   		tela.add(rotulo5);
	   		
	   		
	   		tela.add(nome_cli);
	   		
	   		
	   		
	   		tela.add(consultar);

//	   	 DESABILITAM-SE ALGUNS BOTÕES 
		
	   	
			consultar.setEnabled(true);

			setSize(360, 309);
			setVisible(true);
			setLocationRelativeTo(null);// CENTRALIZA A JANELA 

	   	

//	 Ações Botões
	
		
			
			consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){

							

						if(!nome_cli.getText().trim().equals("")){
								
						    

							cliente_locadora d = new cliente_locadora();
							
							 
							
							List<cliente_locadora> cliente = new ArrayList<cliente_locadora>();
					      
						
							StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cli = :nome_cli");  
						 


							 EntityManager em = f.createEntityManager();
							 
							Query q = em.createQuery(jpql.toString());   
							q.setParameter("nome_cli", nome_cli);   
							List<cliente_locadora> resultados = q.getResultList();  
							
							
							if (nome_cli != null && !nome_cli.equals("")) {
							
								 
						    rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getCelular());
							
							
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   
						}
						}
						public void focusGained(final FocusEvent arg0) {
							// TODO Auto-generated method stub
							
						}

					} // fim do new ActionListener
			);

			
			
			
			
		
			
				
		
		}
			
	
		}

Segue o erro

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JTextField cannot be cast to java.lang.String
	at org.hibernate.type.StringType.toString(StringType.java:44)
	at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93)
	at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:140)
	at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
	at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
	at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
	at org.hibernate.loader.Loader.doQuery(Loader.java:673)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.doList(Loader.java:2220)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)
	at views.CopyOfBuscaCliente$1.actionPerformed(CopyOfBuscaCliente.java:128)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
nel

Boa tarde.

Se eu entendi bem o seu código, o erro está aqui:

q.setParameter("nome_cli", nome_cli);

Nome do Cliente é uma string e você está passando para o parametro um JTextField, por isso da ClassCastException, não há conversão deste tipo. Então, acredito que seja algo assim (entendo muito pouco de swing) para extrair a string contida no JTextFiled:

q.setParameter("nome_cli", nome_cli.getText());

Abraços.

E

nel, fiz as alterações que vc pediu, pelo erro entendi que não está conseguindo achar na tabela o nome_cli, dá uma olhada por favor

erro

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: NOME_CLI of: Beans.cliente_locadora [SELECT c FROM Beans.cliente_locadora c WHERE c.NOME_CLI = :nome]
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:617)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:96)
	at views.CopyOfBuscaCliente$1.actionPerformed(CopyOfBuscaCliente.java:126)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.hibernate.QueryException: could not resolve property: NOME_CLI of: Beans.cliente_locadora [SELECT c FROM Beans.cliente_locadora c WHERE c.NOME_CLI = :nome]
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38)
	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1358)
	at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)
	at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:386)
	at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:566)
	at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:241)
	at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:188)
	at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
	at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
	at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:728)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1216)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3525)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
	at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:93)
	... 26 more

Segue o código como ficou:

package views;

import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

import Beans.cliente_locadora;
import Beans.reserva_locadora;


	@SuppressWarnings("serial")
	public class CopyOfBuscaCliente extends JFrame{ 

		
		JLabel rotulo1, rotulo3, rotulo4, rotulo5;
	   	JButton  consultar;		   	
	    JTextField nome_cli; 
		
		
		private static EntityManagerFactory f = null;

		public CopyOfBuscaCliente(EntityManagerFactory f1){
		
			super("LOCADORA YASMIN"); 
			getContentPane().setForeground(new Color(30, 144, 255));
			getContentPane().setLayout(null);
			Container tela = getContentPane(); 
			setLayout(null);
			
			
			f=f1;
			
			
			tela.setBackground(new Color(181,181,181));
		
			rotulo1 = new JLabel ("Nome:");
	   		rotulo1.setBounds(10, 50, 110, 30);
	   		rotulo3 = new JLabel ("Código do cliente:");
	   		rotulo3.setBounds(10, 101, 150, 30);
	   		rotulo4 = new JLabel ("Celular:");
	   		rotulo4.setBounds(181, 156, 110, 30);
	   		rotulo5 = new JLabel ("Fone:");
	   		rotulo5.setBounds(10, 156, 110, 30);
	   		
	   		
	   		nome_cli = new JTextField (5);
	   		nome_cli.setBounds(67, 53, 142, 25);
	   		
	   		
	   		consultar = new JButton ("Consultar");
	   		consultar.setBounds(235, 54, 90, 23);
	   		
	   		
	   		
	   		
	   		
	   		
	   			   		
	   		tela.add(rotulo1);
	   		tela.add(rotulo3);
	   		tela.add(rotulo4);
	   		tela.add(rotulo5);
	   		
	   		
	   		tela.add(nome_cli);
	   		
	   		
	   		
	   		tela.add(consultar);

//	   	 DESABILITAM-SE ALGUNS BOTÕES 
		
	   	
			consultar.setEnabled(true);

			setSize(360, 309);
			setVisible(true);
			setLocationRelativeTo(null);// CENTRALIZA A JANELA 

	   	

//	 Ações Botões
	
		
			
			consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){

							

						if(!nome_cli.getText().trim().equals("")){
								
						    

							cliente_locadora d = new cliente_locadora();
							String nome= nome_cli.getText();
							 
							
							List<cliente_locadora> cliente = new ArrayList<cliente_locadora>();
					      
						
							StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.NOME_CLI = :nome");  
						 


							EntityManager em = f.createEntityManager();
							 
							Query q = em.createQuery(jpql.toString());   
							q.setParameter("NOME_CLI", nome);   
							List<cliente_locadora> resultados = q.getResultList();  
							
							
							if (nome_cli != null && !nome_cli.equals("")) {
							
								 
						    rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getCelular());
							
							
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   
						}
						}
						public void focusGained(final FocusEvent arg0) {
							// TODO Auto-generated method stub
							
						}

					} // fim do new ActionListener
			);

			
			
			
			
		
			
				
		
		}
			
	
		}
nel

Boa tarde.

Lembre que eu disse que o nome logo após os ‘:’ deve ser o mesmo do parametro que é setado na query? Então, estão diferentes, veja:

StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.NOME_CLI = :nome");

Ali está :nome e na query:

q.setParameter("NOME_CLI", nome);

O que você seta como parametro na sua query não importa como é declarado, se quiser poderia ser :nomedocliente mas na query teria que setar

q.setParameter("nomedocliente", nome);

O que está a esquerda do parameter é que você está utilizando dentro da query, ou seja, o que está após os : e o que está a direita é o valor que você está atribuindo ao parameter. A busca deve ser exatamente como está no seu objeto, isto também deve ficar atento, ou seja, como está declarado o nome no seu objeto cliente_locadora? É nome_cli mesmo?

Se for, está tudo ok, basta fazer o seguinte, altere somente esta linha:

q.setParameter("nome", nome);

Caso o nome no seu objeto cliente esteja declarado de outra forma, deve ser exatmente como está lá, exemplo, no seu objeto cliente_locadora o nome está declarado simplesmente como nome_cliente, então, ficaria assim sua query:

StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cliente = :nome");

O resto é como citei acima, ok?
Abraços.

E

nel, cara, vlw mesmo pela ajuda, só que agora não gera nenhum erro,

mas o meu resultado só vem null, ou 0

o que pode ser?

segue o código

consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){

							

						if(!nome_cli.getText().trim().equals("")){
								
						    

							cliente_locadora d = new cliente_locadora();
							String nome= nome_cli.getText();
							
							JOptionPane.showMessageDialog(null, "Cliente não encontrado!"+ nome);
							 
							
							List<cliente_locadora> cliente = new ArrayList<cliente_locadora>();
					      
						
							StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cli = :nome");  
						 


							EntityManager em = f.createEntityManager();
							 
							Query q = em.createQuery(jpql.toString());   
							q.setParameter("nome", nome);   
							List<cliente_locadora> resultados = q.getResultList();  
							
							
							JOptionPane.showMessageDialog(null, "Cliente não encontrado!"+resultados);
							
						    rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getCelular());
							
							
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   
					//	}
						}
nel

Boa noite.

Esta pesquisa realmente vai trazer uma lista ou simplesmente um único cliente? Se for apenas um único cliente deve usar getSingleResult(). Mas como sua pesquisa é por um nome, eu diria que o mais interessante seria efetuar a busca usando like não?

Se deseja que o nome seja exatamente igual e supondo que traga mais do que um resultado com o mesmo nome então está correto, o fato de vir null é porque não está instanciado sua list só atribuindo valor.

Faça assim:

List<cliente_locadora> listClientes = new ArrayList<cliente_locadora>();
 listClientes = q.getResultList();

//se nao encontrou ninguém
if(listClientes.isEmpity){
  //pode jogar uma mensagem, cliente não encontrado. 
}

Só confere se o nome que você digitou para teste realmente consta na sua database.
Abraços.

E

nel, no bd existe sim o registro que estou procurando, mas os campos da busca vem tudo 0 ou null,

segue abaixo o código com as alterações que vc falou...

consultar.addActionListener(
					new ActionListener(){
						public void actionPerformed(final ActionEvent e){

							

						if(!nome_cli.getText().trim().equals("")){
								
						    

							cliente_locadora d = new cliente_locadora();
							String nome= nome_cli.getText();
							
							JOptionPane.showMessageDialog(null, "Cliente não encontrado!"+ nome);
							 
							
							//List<cliente_locadora> cliente = new ArrayList<cliente_locadora>();
							List<cliente_locadora> listClientes = new ArrayList<cliente_locadora>();   
					      
						
							StringBuilder jpql = new StringBuilder("SELECT c FROM cliente_locadora c WHERE c.nome_cli = :nome");  
						 


							EntityManager em = f.createEntityManager();
							 
							Query q = em.createQuery(jpql.toString());   
							q.setParameter("nome", nome);   
							//List<cliente_locadora> resultados = q.getResultList(); 
							listClientes = q.getResultList();
							
							if(listClientes.isEmpty()){   
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								}  
							
							else{ 
								
								JOptionPane.showMessageDialog(null, "Entrei!");
							rotulo3.setText(String.valueOf(d.getCod_cli()));
							rotulo4.setText(d.getFone_residencial());
							rotulo5.setText(d.getNome_cli());
								
								
							}

							
							
												
							
								
							
							}
							else {
								JOptionPane.showMessageDialog(null, "Cliente não encontrado!");
								
							
    						
							}
						   
					//	}
nel

Boa noite.

É obvio que virão null ou 0. O seu id deve ser do tip int, primitivo, quando você instancia sua classe como o id é int (primitivo) ao invés de null vem 0 e os outros campos ficam null, o que está ocorrendo é que você está pegando os valores do banco mas não está acessando eles, concorda? Sendo assim, após pegar o valor do banco voce deve acessar o valor(res) na sua lista, assim:

else{ JOptionPane.showMessageDialog(null, "Entrei!"); //acessando os valores da lista com foreach for(cliente_locadora cliente : listClientes){ rotulo3.setText(String.valueOf(d.getCod_cli())); rotulo4.setText(d.getFone_residencial()); rotulo5.setText(d.getNome_cli()); //para o seu caso só deve ser preenchido uma única vez certo? Se sim, deixe o break. break; } //caso queira preencher várias vezes, deve pensar na lógica para isso bem como retirar o break ok? }

Abraços.

E

Nel, preciso te agradecer mesmo, cara
obrigado pela força… só vou postar uma correção que fiz no código para que se alguém ter o mesmo problema ter a versão final.

else{ JOptionPane.showMessageDialog(null, "Entrei!"); //acessando os valores da lista com foreach for(cliente_locadora cliente : listClientes){ rotulo3.setText(String.valueOf(cliente.getCod_cli())); rotulo4.setText(cliente.getFone_residencial()); rotulo5.setText(cliente.getNome_cli()); //para o seu caso só deve ser preenchido uma única vez certo? Se sim, deixe o break. break; } //caso queira preencher várias vezes, deve pensar na lógica para isso bem como retirar o break ok? }

cara, posso te adicionar no msn, se voce puder me passa.

Abraços…

nel

Que isso cara, foi um prazer ajuda-lo :slight_smile:

Então, pode sim, enviei ele por MP (Mensagens Privadas) para você ok? Basta acessar suas mensagens privadas.
Qualquer dúvida poste que o pessoal do GUJ é bem atencioso.

Abraços.

Criado 22 de novembro de 2009
Ultima resposta 23 de nov. de 2009
Respostas 16
Participantes 4