Hibernate (Carregar relacionamentos)

0 respostas
A

Bom dia! galera.

Alguém pode me oq estou fazendo de errado ???

Tenho a seguinte estrutura, Usuário que possui um tipo de usuario e funcionário (relacionado).
No meu (usuarioVO.hbm) coloquei a propriedade lazy="false" para sempre carregar os relacionamentos.
Quando acesso a página pela primeira vez carrego uma lista com todos usuários existentes, com os seguintes atributos no grid

  • usuarioVO.pk
  • usuarioVO.dc_nome
  • usuarioVO.tipoUsuarioVO.dc_nome
  • usuarioVO.funcionarioVO.dc_nome

e carrega normalmente todos os atributos.

O problema esta ocorre ao salvar ou atualizar um usuário lista, após a chamada do método "save" recarrego a lista de usuários atualizadas, mas diferente da primeira vez os relacionamentos somente são carregados com as pks o restante dos atributos ficam null.

Alguém sabe me dizer oq pode estar ocorrendo?
Segue abaixo a estrutra criada.

Agradeço desde já.
Muito obrigado

Armando

/************* Action ******************/
// init
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request, 
		  HttpServletResponse response) throws ServletException, IOException {
	try {
		usuarioForm = new UsuarioForm();
		usuarioForm = (UsuarioForm)form;
		vo = usuarioForm.getUsuarioVO();
		// Carrega a lista de usuários
		request.setAttribute("listUsuario", CadastroBO.getInstance().findAll(vo));
	} catch(BusinessException bEx) {
		setMessageError(request, bEx);
	}
	return mapping.findForward("init");
}
 	
// save
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, 
		  HttpServletResponse response) throws Exception {
	try {
		target = "init";
		// Popula os dados.
		usuarioForm = (UsuarioForm)form;
		vo = usuarioForm.getUsuarioVO();
		// Salva o usuario
		UsuarioBO.getInstance().save(vo);
		target = "sucess"
	} catch (BusinessException bEx) {
		target = "init";
		setMessageError(request, bEx);
	}
	return mapping.findForward(target);
}
/************* Médoto da classe DAO ******************/
... Lista todos os usuários
public List<? extends ValueObject> findAll(Class <? extends ValueObject> instanceVO) throws DAOException {
	List<? extends ValueObject> retorno = null;
	Criteria criteria = null;
	try {
		criteria = getSession().createCriteria(instanceVO);
	   	for (Criterion c : criterion) {
			criteria.add(c);
	   	}
	   	retorno = (List<? extends ValueObject>)criteria.list();
	} catch (HibernateException e) {
		throw new DAOException(e);
	} catch (Exception e) {
	   	throw new DAOException(e);
	}
	return retorno;
}
...
	
...
// save
public ValueObject save(ValueObject instanceVO) throws DAOException {
	try {
		getSession().saveOrUpdate(instanceVO);
	} catch (HibernateException e) {
		throw new DAOException(e);
	} catch (Exception e) {
		throw new DAOException(e);
	}
	return instanceVO;
}
...
/************* Classes VO ******************/

public class UsuarioVO ... {
    ...
    private	Long 			pk;
    private String 			dc_login;
    private String 			dc_senha;
    private TipoUsuarioVO 		tipoUsuarioVO;
    private FuncionarioVO 		funcionarioVO;

    //getters and setters
    ....
}

public class TipoUsuarioVO ... {
    ...
    private	Long 	pk;
    private String 	dc_nome;
    private Integer cd_tipo;

    //getters and setters
    ....
}

public class FuncionarioVO ... {
	...
	private Long		pk; 
	private String		cd_codigo;
	private String		dc_nome;
	private String		nr_cpf;
	private String		dc_cargo;
	private Date		dt_admissao;
	private Integer		fl_ativo;

	//getters and setters
	....
}
/*************** struts-config *****************/
		...
		<action path="/UsuarioAction" 
				type="br.com.spd.view.actionform.usuario.UsuarioAction" 
				parameter="method" 
				input=".usuario" 
				name="UsuarioForm" 
				scope="request">
				<forward name="init"      		 path=".usuario"/>
				<forward name="success"   		 path=".usuario"/>
				<forward name="back"  	  		 path=".mainpage"/>
		</action>
		...
/*************** hbm's *****************/
<hibernate-mapping>
	<class table="usuario" name="br.com.spd.vo.usuario.UsuarioVO">
		<id name="pk" column="pk" type="long" unsaved-value="0">
			<generator class="identity"/>
		</id>
		<property name="dc_login" 		column="dc_login" 		type="string"/>
		<property name="dc_senha" 		column="dc_senha" 		type="string"/>
		<property name="fl_ativo"		column="fl_ativo"		type="integer"/>

	    <many-to-one name="tipoUsuarioVO"   
	    	column="pk_tipousuario" 
	    	class="br.com.spd.vo.usuario.TipoUsuarioVO"
	    	lazy="false"/>

	    <many-to-one name="funcionarioVO"   
	    	column="pk_funcionario" 
	    	class="br.com.spd.vo.cadastro.FuncionarioVO"
	    	lazy="false"/>
	</class>
</hibernate-mapping>

<hibernate-mapping>
	<class table="tipousuario" name="br.com.spd.vo.usuario.TipoUsuarioVO">
		<id name="pk" column="pk" type="long" unsaved-value="0">
			<generator class="identity"/>
		</id>
		<property name="dc_nome"	column="dc_nome"	type="string"/>
		<property name="cd_tipo" 	column="cd_tipo" 	type="integer"/>		
	</class>
</hibernate-mapping>

<hibernate-mapping>
<class table="funcionario" name="br.com.spd.vo.cadastro.FuncionarioVO">
	<id name="pk" column="pk" type="long" unsaved-value="0">
		<generator class="identity"/>
	</id>
	<property name="cd_codigo" 		column="cd_codigo" 		type="string"/>
	<property name="dc_nome" 		column="dc_nome" 		type="string"/>
	<property name="nr_cpf" 		column="nr_cpf" 		type="string"/>
	<property name="dc_cargo" 		column="dc_cargo" 		type="string"/>
	<property name="dt_admissao"	column="dt_admissao"	type="date"/>
	<property name="fl_ativo" 		column="fl_ativo" 		type="integer"/>
</class>
</hibernate-mapping>
Criado 4 de março de 2009
Respostas 0
Participantes 1