DAO - Hibernate

Olá pessoal,
gostaria de saber se vcs tem uma outra solução.
bom tenho um tela de lista de funcionarios
Então no meu DAO tem o seguinte select:

sql.append(" SELECT funcionario.funciId, estabelecimento.estabNome, tipoFuncionario.tpfunDescricao, usuario.usuarApelido, funcionario.funciFerias, funcionario.funciLicenca ");
sql.append(" FROM FuncionarioVO funcionario, UsuarioVO usuario, EstabelecimentoVO estabelecimento, TipoFuncionarioVO tipoFuncionario");
sql.append(" WHERE");
sql.append(" funcionario.estabId = estabelecimento.estabId");
sql.append(" AND");
sql.append(" funcionario.tpfunId = tipoFuncionario.tpfunId");
sql.append(" AND");
sql.append(" funcionario.usuarId = usuario.usuarId");
sql.append(" AND");
sql.append(" funcionario.estabId");

bom para pegar os campos do select estou fazendo um VO que serve apenas para esse select e que não está mapeado para o hibernate.
Fica assim:

Iterator iterator = getSessaoAtual().createQuery(sql.toString()).list().listIterator();
resultado = new ArrayList();
while (iterator.hasNext()) {
Object[] linha = (Object[])iterator.next();
Long funciId = (Long)linha[0];
String estabNome = (String)linha[1];
String tpfunDescricao = (String)linha[2];
String usuarApelido = (String)linha[3];
String funciFerias = (String)linha[4];
String funciLicenca = (String)linha[5];
FuncionarioEstabelecimentoVO funcionarioEstabelecimento = new FuncionarioEstabelecimentoVO(funciId, estabNome, tpfunDescricao, usuarApelido, funciFerias, funciLicenca);
resultado.add(funcionarioEstabelecimento);
}

Bom pessoal, não sei se fui muito claro, mas a questão é, alguem teria uma outra solução para que não precise fazer o VO.

Obrigado.