Dúvida Hibernate!

1 resposta
rfigueiredo0622

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.

1 Resposta

rfigueiredo0622

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());

}

}
Criado 2 de julho de 2008
Ultima resposta 3 de jul. de 2008
Respostas 1
Participantes 1