Dúvida Hibernate!

Boa noite, pessoal!!
Estou começando a trabalhar com hibernate agora e estou tendo problemas para fazer JOIN entre 2 tabelas.
Meu caso é o seguinte:

  • Tenho um bean Usuario e um Perfil;
  • O bean Perfil está declarado dentro de usuário;
  • Estou trabalhando com arquivos .hbm.xml;
  • O mapeamento no arquivo hibernate.cfg.xml está certo;
  • Abaixo os códigos das classes e mapeamentos:

Usuario. java

public class Usuario implements IUsuario,Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
private long   idUsuario;
private String login;
private String nomeUsuario;
private String senha;
private char estado;
private IPerfil perfil;	
private String email;
/**
 *  gets e sets
 */

}

Perfil.java

public class Perfil implements IPerfil, Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;
private long   idPerfil;	
private String nomePerfil;

/**
 *  gets e sets
 */

}

Usuario.hbm.xml

    <class name="br.com.modelo.pojo.Usuario" table="USUARIO">
            <id name="idUsuario" column="USUA_SQ_USUARIO" type="long">
				<generator class="sequence">
	        		<param name="sequence">SQ_USUA_SQ_USUARIO</param>
	      		</generator>
            </id>                
            <property name="login" column="USUA_TX_LOGIN" type="string"/>
            <property name="senha" column="USUA_TX_SENHA" type="string"/>
            <property  name="nomeUsuario" column="USUA_NM_USUARIO" type="string"/>                
            <property name="estado" column="USUA_SG_ESTADO" type="char"/>
            <property name="email" column="USUA_TX_EMAIL" type="string"/>
			
            <many-to-one name="perfil" 
             			  class="br.com.modelo.pojo.Perfil" 
        				  column="PERF_SQ_PERFIL"

        	 />
    </class>

Perfil.hbm.xml

   <class name="br.com.modelo.pojo.Perfil" table="PERFIL">
            <id name="idPerfil" column="PERF_SQ_PERFIL" type="long">                							
				<generator class="sequence"> 
	        		<param name="sequence">SQ_PERF_SQ_PERFIL</param>
	      		</generator>
            </id>
            <property  name="nomePerfil" column="PERF_NM_PERFIL" type="string"/>
    </class>

Com os mapeamentos acima está incluindo, excluindo, alterando e consultando. O meu problema é com a consulta. O hibernate não está fazendo o join na tabela de Perfil quando consulto um Usuário.
No meu UsuarioDAO no método de consulta estou fazendo o seguinte:

UsuarioDAO.java

public List<IUsuario> consultarUsuarios(IUsuario pojo) throws HibernateException, PersistenceLayerException {

	try {

		List<IUsuario> listaUsuarios = new ArrayList<IUsuario>();

		Session session = sessionFactory.openSession();
		Criteria criteria = session.createCriteria(Usuario.class);

		
		criteria.add(Restrictions.eq("perfil.id",pojo.getPerfil().getIdPerfil()));
		criteria.add(Restrictions.eq("estado", pojo.getEstado()));			

		if(!"".equals(pojo.getLogin())){
			criteria.add(Restrictions.like("login", pojo.getLogin()));
		}
		if(!"".equals(pojo.getNomeUsuario())){
			criteria.add(Restrictions.like("nome", pojo.getNomeUsuario()));
		}

		
		
		listaUsuarios = criteria.list();
		return listaUsuarios;
		
	} catch (HibernateException ex) {
		throw new PersistenceLayerException(ex.getMessage());
	}
}

O que devo fazer para acertar esse join entre as tabelas Usuario e Perfil quando faço uma consulta de usuário?
Desde já agradeço.
Rodrigo.

Bom dia, pessoal

Já consegui resolver o problema que eu estava tendo com join no hibernate. Resolvi da seguinte maneira:

  • Antes:

UsuarioDAO.java

public List consultarUsuarios(IUsuario pojo) throws HibernateException, PersistenceLayerException {

try {

List listaUsuarios = new ArrayList();

Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(Usuario.class);

criteria.add(Restrictions.eq(“perfil.id”,pojo.getPerfil().getIdPerfil()));
criteria.add(Restrictions.eq(“estado”, pojo.getEstado()));

if(!"".equals(pojo.getLogin())){
criteria.add(Restrictions.like(“login”, pojo.getLogin()));
}
if(!"".equals(pojo.getNomeUsuario())){
criteria.add(Restrictions.like(“nome”, pojo.getNomeUsuario()));
}

listaUsuarios = criteria.list();
return listaUsuarios;

} catch (HibernateException ex) {
throw new PersistenceLayerException(ex.getMessage());
}
}

  • Depois:
    UsuarioDAO.java

public List consultarUsuarios(IUsuario pojo) throws HibernateException, PersistenceLayerException {

try {

List listaUsuarios = new ArrayList();

Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(Usuario.class).createAlias(“perfil”, “perfil”);

criteria.add(Restrictions.eq(“perfil.id”,pojo.getPerfil().getIdPerfil()));
criteria.add(Restrictions.eq(“estado”, pojo.getEstado()));

if(!"".equals(pojo.getLogin())){
criteria.add(Restrictions.like(“login”, pojo.getLogin()));
}
if(!"".equals(pojo.getNomeUsuario())){
criteria.add(Restrictions.like(“nome”, pojo.getNomeUsuario()));
}

listaUsuarios = criteria.list();
return listaUsuarios;

} catch (HibernateException ex) {
throw new PersistenceLayerException(ex.getMessage());
}
}