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>