Vraptor + hibernate + Logica de Procurar por nome, não funciona

Bom dia pessoal.
Estou com um problema em um projeto que estou desenvolvendo para a instituição pela qual eu trabalho, e estou apanhando nisso e não estou conseguindo resolver.
O problema é o seguinte.
Criei um projeto todo utilizando hibernate, vraptor, e talz, e utilizei o Design DAO para a construção do projeto, bem vamos la ao que interessa.
como vou colocar abaixo, nos meus códigos, existe uma pagina jsp, que se chama, procurar.ok.jps, e essa pagina tem um campo para o usuario digitar o nome que deseja procurar, que por sinal, essa pagina possui um formulario com um action para titulacao.procuranome.logic, cujo esse procuranome, esta dentro do meu titulacao.logic, e configure no meu views.properties, quando essa logica foi valida, ele vai me redirecionar para o titulacao.listatitulacao.logic. que vai me listar os nomes encontrados.

Ai esta o grande problema., quando eu faço para procurar por uma string, ele me acusa um erro

javax.servlet.ServletException: Provided id of the wrong type for class br.edu.fsj.registrodediplomas.modelo.Titulacao. Expected: class java.lang.Long, got class java.lang.String
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:69)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

e quando eu utilizo uma logica para procurar pelo id, ele funciona.

Ai galera se puderem ajudar, desde ja agradeço, atenciosamente.
João Victor.

CODIGOS:

Titulacao.java

[code]package br.edu.fsj.registrodediplomas.modelo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Titulacao {
@Id
@GeneratedValue
private Long id;
private String nome;

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

}[/code]

Dao.java

package br.edu.fsj.registrodediplomas.dao;

import java.util.List;

import org.hibernate.Session;

public class Dao<T> {
	private Session session;
	private final Class classe;
	
	public Dao(Session session, Class classe) {
		this.session =session;
		this.classe=classe;
	}
	
	public void adiciona(T u){
		this.session.save(u);
	}
	
	public void remove(T u){
		this.session.delete(u);
	}
	
	public void atualiza (T u){
		
		this.session.merge(u);
	}
	
	public List<T> listaTudo(){
		return this.session.createCriteria(this.classe).list();
	}
	
	public T procuranome(String nome) {
		return (T) session.load(this.classe, nome);

	}
	
	public T procura(Long id) {
		return (T) session.load(this.classe, id);
	}
	
	protected Session getSession(){
		return session;
	}
}


DaoFactory.java

package br.edu.fsj.registrodediplomas.dao;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.edu.fsj.registrodediplomas.modelo.Aluno;
import br.edu.fsj.registrodediplomas.modelo.Curso;
import br.edu.fsj.registrodediplomas.modelo.Formasdeingresso;
import br.edu.fsj.registrodediplomas.modelo.Habilitacao;
import br.edu.fsj.registrodediplomas.modelo.Nacionalidade;
import br.edu.fsj.registrodediplomas.modelo.Naturalidade;
import br.edu.fsj.registrodediplomas.modelo.Processosrd;
import br.edu.fsj.registrodediplomas.modelo.Titulacao;
import br.edu.fsj.registrodediplomas.modelo.Usuario;
import br.edu.fsj.registrodediplomas.util.HibernateUtil;

public class DaoFactory {

	private final Session session;
	private Transaction transaction;

	public DaoFactory() {
		session = HibernateUtil.getSession();
	}

	public void beginTransaction() {
		this.transaction = this.session.beginTransaction();
	}

	public void comit() {
		this.transaction.commit();
		this.transaction = null;
	}

	public boolean hasTransaction() {
		return this.transaction != null;
	}

	public void rollback() {
		this.transaction.rollback();
		this.transaction = null;
	}

	public void close() {
		this.session.close();
	}

	/*public Dao getUsuarioDao() {
		return new UsuarioDao(this.session);
	}*/
	
	public Dao<Usuario> getUsuarioDao() {
		return new UsuarioDao(this.session);
	}

	public Dao<Aluno> getAlunoDao() {
		return new Dao<Aluno>(this.session, Aluno.class);
	}

	public Dao<Curso> getCursoDao() {
		return new Dao<Curso>(this.session, Curso.class);
	}

	public Dao<Formasdeingresso> getFormasdeingressoDao() {
		return new Dao<Formasdeingresso>(this.session, Formasdeingresso.class);
	}

	public Dao<Habilitacao> getHabilitacaoDao() {
		return new Dao<Habilitacao>(this.session, Habilitacao.class);
	}

	public Dao<Titulacao> getTitulacaoDao() {
		return new Dao<Titulacao>(this.session, Titulacao.class);
	}

	public Dao<Processosrd> getProcessoSRDDao() {
		return new Dao<Processosrd>(this.session, Processosrd.class);
	}
	
	public Dao<Naturalidade> getNaturalidadeDao() {
		return new Dao<Naturalidade>(this.session, Naturalidade.class);
	}
	
	public Dao<Nacionalidade> getNacionalidadeDao() {
		return new Dao<Nacionalidade>(this.session, Nacionalidade.class);
	}
}

DaoInterceptor.java


package br.edu.fsj.registrodediplomas.registro;

import org.vraptor.Interceptor;
import org.vraptor.LogicException;
import org.vraptor.LogicFlow;
import org.vraptor.annotations.Out;
import org.vraptor.view.ViewException;

import br.edu.fsj.registrodediplomas.dao.DaoFactory;

public class DaoInterceptor implements Interceptor{
	private final DaoFactory factory = new DaoFactory();
	public void intercept(LogicFlow flow) throws LogicException, ViewException {
		//executa a logica
		flow.execute();
		
		//se sobrou transsacao sem comitar faz rollback
		if (factory.hasTransaction()){
			factory.rollback();
		}
		
		factory.close();
	}
	
	@Out(key="br.edu.fsj.registrodediplomas.dao.DaoFactory")
	public DaoFactory getFactory(){
		return factory;
	}
	
}

procurar.ok.jsp



<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<h1>Cadastro de Habilitacoes</h1>
<form action="titulacao.procuranome.logic" method="post">
      
      Nome:
      <input type="text" name="titulacao.nome" value="${titulacao.nome}"/>
      
     
      <input type="submit"/>
</form>

listatitulacao.ok.jsp

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 <html>
 	<body>
 	teste
<display:table id="titulacao" name="${titulacao}" requestURI="titulacao.listatitulacao.logic">
  <display:column property="id" />
  <display:column property="nome" sortable="true" />
</display:table>
 	</body>
 </html>


  
</display:table>

TitulacaoLogic.java

package br.edu.fsj.registrodediplomas.logic;

import java.util.List;

import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;

import br.edu.fsj.registrodediplomas.dao.DaoFactory;
import br.edu.fsj.registrodediplomas.modelo.Titulacao;
import br.edu.fsj.registrodediplomas.registro.DaoInterceptor;


@Component("titulacao")
@InterceptedBy(DaoInterceptor.class)
public class TitulacaoLogic {
	private final DaoFactory daoFactory;
	private Titulacao titulacao;
	private List<Titulacao> titulacoes;

	public TitulacaoLogic(DaoFactory daoFactory) {
		this.daoFactory = daoFactory;
	}

	// formulario para adicao
	public void formulario() {

	}
	
	public void procurar() {

	}
	// formulario para edicao

	public void editar(Titulacao titulacao) {
		// carrega os dados no banco para edicao

	
		this.titulacao = this.daoFactory.getTitulacaoDao().procura(titulacao.getId());
	}

	// Adiciona uma titulacao novo ou atualiza se for edicao
	
	public void armazena(Titulacao titulacao) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getTitulacaoDao().atualiza(titulacao);
		this.daoFactory.comit();
	}

	// remove uma titulacao
	public void remove(Titulacao titulacao) {
		this.daoFactory.beginTransaction();
		this.daoFactory.getTitulacaoDao().remove(titulacao);
		this.daoFactory.comit();
	}

	// lista todos as titulacoes
	public void lista() {
		this.titulacoes = this.daoFactory.getTitulacaoDao().listaTudo();
	}

	// getter pra titulacao
	public Titulacao getTitulacao() {
		return titulacao;
	}

	// getter pra lista de titulacoes
	public List<Titulacao> getTitulacoes() {
		return titulacoes;
	}
	
	public void procuranome(Titulacao titulacao) {
 		this.titulacao = this.daoFactory.getTitulacaoDao().procuranome(titulacao.getNome());
 		 		
 	}

	// lista todos as titulacoes
	public void listatitulacao() {
		this.titulacoes = this.daoFactory.getTitulacaoDao().listaTudo();
	}

}

Amigo,
Da maneira que você esta fazendo é para buscar pela PK

     public T procuranome(String nome) {  
         return (T) session.load(this.classe, nome);  
   
     } 

Use como abaixo ou consulte a documentação do Hibernate

    public ArrayList RoLocalBusca(String local){
        ArrayList ros = new ArrayList();
        Session session = (Session) HibernateUtil.getSession();
        ros = (ArrayList) session.createCriteria(Ro.class)
        .add(Expression.eq("localRO", local))
        .list();
        return ros;
    }

Espero ajudar.
Att.
Wallfox

[quote=Wallfox]Amigo,
Da maneira que você esta fazendo é para buscar pela PK

     public T procuranome(String nome) {  
         return (T) session.load(this.classe, nome);  
   
     } 

Use como abaixo ou consulte a documentação do Hibernate

    public ArrayList RoLocalBusca(String local){
        ArrayList ros = new ArrayList();
        Session session = (Session) HibernateUtil.getSession();
        ros = (ArrayList) session.createCriteria(Ro.class)
        .add(Expression.eq("localRO", local))
        .list();
        return ros;
    }

Espero ajudar.
Att.
Wallfox
[/quote]

Mais no caso, eu vou ter que substituir, esse método procuranome, que eu criei, e chamar esse outro método ai?

Não… acho que fica assim:
Dê uma consultada na documentação do Hibernate;

public List<T> procuraNome(String nome){  
     List<T> resultado = new List();  
     Session session = (Session) HibernateUtil.getSession();  
     resultado = (ArrayList) session.createCriteria(this.class)  
     .add(Expression.eq("nome", nome))  
     .list();  
     return resultado;  
 } 

[quote=Wallfox]Não… acho que fica assim:
Dê uma consultada na documentação do Hibernate;

public List<T> procuraNome(String nome){ List<T> resultado = new List(); Session session = (Session) HibernateUtil.getSession(); resultado = (ArrayList) session.createCriteria(this.class) .add(Expression.eq("nome", nome)) .list(); return resultado; } [/quote]

OK cara… muito obrigado pela ajuda…

tentei aqui, e continuou dando o mesmo erro, vou da um consultada aqui no material do hibernate.

mais desde ja agradeço.

O mesmo erro? Não deveria. Posta o erro ai pra gente! OK?

[code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Provided id of the wrong type for class br.edu.fsj.registrodediplomas.modelo.Titulacao. Expected: class java.lang.Long, got class java.lang.String
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:69)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

org.hibernate.TypeMismatchException: Provided id of the wrong type for class br.edu.fsj.registrodediplomas.modelo.Titulacao. Expected: class java.lang.Long, got class java.lang.String
org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:109)
org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:905)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:822)
org.hibernate.impl.SessionImpl.load(SessionImpl.java:815)
br.edu.fsj.registrodediplomas.dao.Dao.procuranome(Dao.java:34)
br.edu.fsj.registrodediplomas.logic.TitulacaoLogic.procuranome(TitulacaoLogic.java:72)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.vraptor.component.DefaultLogicMethod.execute(DefaultLogicMethod.java:61)
org.vraptor.interceptor.ExecuteLogicInterceptor.intercept(ExecuteLogicInterceptor.java:32)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.SettingAndValidationInterceptor.intercept(SettingAndValidationInterceptor.java:130)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.InjectionInterceptor.intercept(InjectionInterceptor.java:41)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.ComponentLookupInterceptor.intercept(ComponentLookupInterceptor.java:57)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
br.edu.fsj.registrodediplomas.registro.DaoInterceptor.intercept(DaoInterceptor.java:15)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInteceptor.java:47)
org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:97)
org.vraptor.core.DefaultController.execute(DefaultController.java:46)
org.vraptor.http.DefaultDispatcher.dispatch(DefaultDispatcher.java:44)
org.vraptor.VRaptorServlet.service(VRaptorServlet.java:48)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.
Apache Tomcat/6.0.18[/code]

[b]ESSE O ERRO.

Atenciosamente.

João Victor.[/b]

Bom… pelo erro

registrodediplomas.modelo.Titulacao. Expected: class java.lang.Long, got class java.lang.String

Em algum lugar era para ser Long e é String. Passa o DAO alterado novamente.

Att.
Wallfox

[quote=Wallfox]Bom… pelo erro

registrodediplomas.modelo.Titulacao. Expected: class java.lang.Long, got class java.lang.String

Em algum lugar era para ser Long e é String. Passa o DAO alterado novamente.

Att.
Wallfox[/quote]

Cara o que eu to achando estranho que antes estava dando o mesmo erro.

package br.edu.fsj.registrodediplomas.dao;

import java.util.List;

import org.hibernate.Session;

public class Dao<T> {
	private Session session;
	private final Class classe;
	
	public Dao(Session session, Class classe) {
		this.session =session;
		this.classe=classe;
	}
	
	public void adiciona(T u){
		this.session.save(u);
	}
	
	public void remove(T u){
		this.session.delete(u);
	}
	
	public void atualiza (T u){
		
		this.session.merge(u);
	}
	
	public List<T> listaTudo(){
		return this.session.createCriteria(this.classe).list();
	}
	
	/*public T procuranome(String nome) {
		return (T) session.load(this.classe, nome);

	}*/

	public List<T> procuraNome(String nome){    
	List<T> resultado = new List();    
	Session session = (Session) HibernateUtil.getSession();    
	resultado = (ArrayList) session.createCriteria(this.class)    
	.add(Expression.eq("nome", nome))    
	.list();    
	return resultado;    
	}  
	
	public T procura(Long id) {
		return (T) session.load(this.classe, id);
	}
	
	protected Session getSession(){
		return session;
	}
}