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.