Duvidas sobre criteria

4 respostas
A

Preciso criar um método no main que passe uma string para este método e em seguida possa imprimir este retorno ai “c.list()”.
O método abaixo está no package dao e o main em outro package
Eu também tenho um hibernateUtil e um daogenerico.

public Collection buscaPorNome(String nome) {

Criteria c = getSession().createCriteria(Contato.class);

c.add(Restrictions.like(nome”, nome));

return c.list();

}

4 Respostas

Cesimar
public static void main(String[] args){
   for(Contato contato : buscaPorNome("fulano")){
       System.out.println(contato.toString());
   }

}
A

Gerou um monte de INFO e ainda não imprimiu os registros mas o código esta sem erros. Vou citar o INFO e o código que eu fiz aqui.
Mas antes quero dizer que minha intenção é fazer um crud, meu banco é MySQL e já contem alguns registros; Esta sem interface mas estou testando pelo main, uma busca com critéria
Aqui é o INFO:
[color=red]
run:
02/05/2011 01:25:09 org.hibernate.cfg.annotations.Version
INFO: Hibernate Annotations 3.3.1.GA
02/05/2011 01:25:09 org.hibernate.cfg.Environment
INFO: Hibernate 3.2.5
02/05/2011 01:25:09 org.hibernate.cfg.Environment
INFO: hibernate.properties not found
02/05/2011 01:25:09 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
02/05/2011 01:25:09 org.hibernate.cfg.Environment
INFO: using JDK 1.4 java.sql.Timestamp handling
02/05/2011 01:25:09 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
02/05/2011 01:25:09 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
02/05/2011 01:25:09 org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
02/05/2011 01:25:09 org.hibernate.cfg.AnnotationConfiguration secondPassCompile
INFO: Hibernate Validator not found: ignoring
02/05/2011 01:25:09 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
02/05/2011 01:25:09 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
02/05/2011 01:25:09 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
02/05/2011 01:25:09 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/agendadatabase
02/05/2011 01:25:09 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root, password=****}
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: MySQL, version: 5.5.10
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.6 ( Revision: ${svn.Revision} )
02/05/2011 01:25:09 org.hibernate.dialect.Dialect
INFO: Using dialect: org.hibernate.dialect.MySQLDialect
02/05/2011 01:25:09 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Using default transaction strategy (direct JDBC transactions)
02/05/2011 01:25:09 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Maximum outer join fetch depth: 2
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL inserts for batching: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
02/05/2011 01:25:09 org.hibernate.hql.ast.ASTQueryTranslatorFactory
INFO: Using ASTQueryTranslatorFactory
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
02/05/2011 01:25:09 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
02/05/2011 01:25:09 org.hibernate.impl.SessionFactoryImpl
INFO: building session factory
02/05/2011 01:25:09 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured[/color]
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Aqui é o COnfig do Hibernate

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/agendadatabase</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">junior</property>
  </session-factory>
</hibernate-configuration>

Aqui é o hibernateUtil

package util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new
                    AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static Session getSession() {
        return sessionFactory.openSession();
    }
}

Aqui é o Dao generico

package dao;

import util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DaoGenerico<T> {

    private Class classe;
    private Session session;

    protected Session getSession() {
        return session;
    }

    public DaoGenerico(Class classe) {
        this.session = HibernateUtil.getSession();
        this.classe = classe;
    }

    public void salvar(T objeto) {
        session.save(objeto);
    }

    public void remover(T objeto) {
        Transaction ts = session.beginTransaction();
        session.save(objeto);
        ts.commit();
    }

    public void atualizar(T objeto) {
        Transaction ts = session.beginTransaction();
        session.update(objeto);
        ts.commit();
    }

    public T load(long id) {
        return (T) session.load(classe, id);
    }
}

Aqui é dao do Contato

package dao;

import java.util.Collection;
import modelo.Contato;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

public class CobtatoDao extends DaoGenerico<Contato>{

    public ContatoDao() {
        super(Contato.class);
    }

    public Collection<Contato> buscaPorNome(String nome) {
        Criteria c = getSession().createCriteria(Contato.class);
        c.add(Restrictions.ilike("nome", nome));
        //c.addOrder(Order.asc("idade"));
        return c.list();
    }
}

Aqui é a classe de entidade

package modelo;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Contato implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String email;
    private String endereco;
    private String nascimento;
    private String nome;
    private String observacao;
    private String sexo;
    private int telefone;

    public Contato() {
    }

    public Contato(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getNascimento() {
        return nascimento;
    }

    public void setNascimento(String nascimento) {
        this.nascimento = nascimento;
    }

    public String getNome() {
        return nome;
    }

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

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public int getTelefone() {
        return telefone;
    }

    public void setTelefone(int telefone) {
        this.telefone = telefone;
    }
}

Aqui é o main que eu uso para testar a busca:

package testehibernate;

import dao.ContatoDao;
import modelo.Contato;

public class Main extends dao.ContatoDao {

    public static void main(String[] args) {

         ContatoDao dao = new ContatoDao();
        for (Contato contato : dao.buscaPorNome("Cicrano")) {
            System.out.println(contato.toString());
        }
    }
}

Aprecio qualquer ajuda pois já venho tentando montar isso a alguns dias :oops: . obrigado.

jamirdeajr

Não sei se é o que você precisa mas creio que só faltou incluir os ‘coringas’ no inicio e fim da palavra procurada ou o equivalente MatchMode.ANYWHERE.
Do jeito que estava antes ele só retornaria os nomes exatamente iguais.
Você pode também manter seu método no DAO e ao passar a String nome incluir os coringas.

public Collection<Contato> buscaPorNome(String nome) { Criteria c = getSession().createCriteria(Contato.class); c.add(Restrictions.like("nome","%"+nome+"%")); return c.list(); }
Ou

public Collection<Contato> buscaPorNome(String nome) { Criteria c = getSession().createCriteria(Contato.class); c.add(Restrictions.like("nome", nome).MatchMode.ANYWHERE); return c.list(); }

A

Não era bem isso, mas o que você citou é algo muitíssimo importante que eu devo acrescentar no código e eu nem estava atento para este lado.
Vai facilitar a vida de quem precisar fazer pesquisas…
Resolvemos parcialmente o problema, pois criei aqui um hbm.xml para mapear a entidade.
Dai eu consegui obter o resultado da pesquisa, porém, me é exibido esta mesma serie de info’s que eu coloquei em vermelho no inicio da postagem
Obrigado pela ajuda.

Criado 30 de abril de 2011
Ultima resposta 2 de mai. de 2011
Respostas 4
Participantes 3