JAVA :: Conversão List Object in Objeto Class

Pessoal, consegui resolver um problema de retorno do meu JPA jogando o resultado em uma lista de objetos genérico porém, acabei tendo um outro problema.

List<Object> lista = (List<Object>) em.createNativeQuery(query)
				.setParameter(1, numeroCeps)
				.setParameter(2, numeroComplementoCeps)
				.getResultList();

O problema agora e converter essa lista de objetos genérico para uma lista de minhas unidades.

Eu consigo acessar a lista utilizando a forma :

for(Object obj : lista){
			Object[] o = (Object[]) obj;
			System.out.println(String.valueOf(o[0]));
			System.out.println(String.valueOf(o[1]));
			System.out.println(String.valueOf(o[2]));
			System.out.println(String.valueOf(o[3]));
			System.out.println(String.valueOf(o[4]));
			System.out.println(String.valueOf(o[5]));
			System.out.println(String.valueOf(o[6]));
		}

Queria saber se tem alguma forma mais automática do tipo:

List<Unidade> = (List<Unidade>) lista;

Com java 8 da pra fazer em uma linha.
pode fazer algo assim.

List<SeuObjeto> seuObjeto  = em.createNativeQuery(query)
				.setParameter(1, numeroCeps)
				.setParameter(2, numeroComplementoCeps)
				.getResultList().stream().map(e -> {
                                     int count = 0;
                                     Object[] o = (Object[]) obj;
                                     return new SeuObjeto(obj[count++],obj[count++],obj[count++],obj[count++],obj[count++]);
}).collect(Collectors.toList());

Veja se isto serve :http://docs.oracle.com/javaee/5/api/javax/persistence/SqlResultSetMapping.html

Então @fercampospinheiro, o real problema que tenho é o seguinte:
Atualmente estou desenvolvendo um sistema utilizando um banco de dados legado na empresa, DB2 mainframe
Com a complexidade de relacionamento das tabelas e a simplicidade do retorno decidi, inicialmente, criar um entity (Unidade.class) apenas com os campos que desejo trabalhar e converter o resultado do meu select já nesta unidade.
O que está acontecendo e que quando eu faço a query direto já especificando o tipo de objeto que é esperado, dentro do createNativeQuery, não sei por qual motivo a primeira linha vem repetida.

Se eu pego a mesma query e executo no DB2 o resultado vem correto. Esta na verdade foi a única forma que eu consegui fazer funcionar, transformar em um objeto genérico, e agora quero jogar ele para o objeto que desejo, Unidade.class.

Ficou assim a parte de conversão para Lista:

public List getlistaUnidade(List lista){
List unidades = new ArrayList();

	for(Object obj : lista){
		Unidade unidadeUnit = new Unidade();
		Object[] obUnit = (Object[]) obj;
		unidadeUnit.setNumeroPv(new Long(String.valueOf(obUnit[0])));
		unidadeUnit.setNomePv(String.valueOf(obUnit[1]));
		unidadeUnit.setStatusVinculacao(String.valueOf(obUnit[2]));
		unidadeUnit.setTipoServico(Integer.parseInt(String.valueOf(obUnit[3])));
		unidadeUnit.setStatus(String.valueOf(obUnit[4]));
		unidadeUnit.setCidade(String.valueOf(obUnit[5]));
		unidadeUnit.setBairro(String.valueOf(obUnit[6]));
		unidadeUnit.setLogradouro(String.valueOf(obUnit[7]));
		unidadeUnit.setNumeroCep(Integer.parseInt(String.valueOf(obUnit[8])));
		unidadeUnit.setNumeroCepComplemento(Integer.parseInt(String.valueOf(obUnit[9])));
		unidadeUnit.setUf(String.valueOf(obUnit[10]));
		unidades.add(unidadeUnit);
	}
	return(unidades);
	
}

É fato que isso mais para frente vai dar zebra. Já verifiquei o dialect que está na configuração do JPA e está certo. Peguei a query que o JPA gera no log do jboss e executei no db2 e o resultado vem corretor mas quando jogo dentro do código convertendo direto, não vem certo. :frowning:

Atualmente está assim:

	public List<Unidade> buscarUnidadeGenerica(int numeroCeps, int numeroComplementoCeps){
		String query = " SELECT  ... FROM ..... WHERE ...."    		
		List<Object> lista = (List<Object>) em.createNativeQuery(query)
				.setParameter(1, numeroCeps)
				.setParameter(2, numeroComplementoCeps)
				.getResultList();
		
			return getlistaUnidade(lista); 

Sei que o certo, mas não está funcinando, seria:

	public List<Unidade> buscarUnidadeGenerica(int numeroCeps, int numeroComplementoCeps){
		String query = " SELECT  ... FROM ..... WHERE ...."    		
		return em.createNativeQuery(query, Unidade.class)
				.setParameter(1, numeroCeps)
				.setParameter(2, numeroComplementoCeps)
				.getResultList();

Esse mapeamento que você diss eu tentei fazer mas sem sucesso.
Já pegou algum problema nesse sentido?

Pessoal, consegui matar o problema e vou postar a resposta, talvez isso ajude futuramente alguém.
O problema de repetir o primeiro resultado da consulta acontecia, no meu caso, pelo seguinte:

Quando eu denomino que o @id do meu objeto, o java intende que por ser um id ele é único logo, caso o mesmo id repita-se as mesma informação das demais colunas serão repetidas para o próximo ou próximos objetos, que tenham este mesmo id. Vamos para o exemplo, para melhor explicar.

Supondo que eu tenha o seguinte relacionamento:

Coloquei um exemplo simples, até mesmo com os nomes das colunas fáceis, mas suponha que em cada tabela eu tenha mais 10 colunas e e o relacionamento seja bem mais complexo, não tem bobo como este, logo, crio a @Entity apenas com as colunas que desejo.

Eu

@Entity
@Id
private Long id;
private String nomeRua;
private String nomeBairro;
private Integer numeroCep;
private Integer complementoCep;

// Getters e Setters

Suponha que eu tenha uma pessoa cadastrada em 3 endereços diferente. Com a minha lógica e

SELECT 
	ID_PESSOA AS id,
	NOME_RUA AS nomeRua,
	NOME_BAIRRO AS nomeBairro,
	NUMERO_CEP AS numeroCep,
	COMPLEMENTO_CEP AS complementoCep
FROM PESSOA PES
INNER JOIN ENDERECO END
	ON PES.ID_PESSOA = NU_ID_PESSOA
LEFT JOIN ENDERECO_COM_CEP ENDCEP
	ON END.ID_ENDERECO = ENDCEP.ID_ENDERECO 
INNER JOIN CEP CE
	ON CE.ID_CEP = ENDCEP.ID_CEP
WHERE PES.ID_PESSOA = 1;

Suponha que o resultado correto desta minha queri fosse:

Porém, como estava notando apenas o id, o java duplicada todo os outro atributos para a linha de baixo deixando o resultado da seguinte forma:

A forma de resolver isso foi colocar como id os elementos que fazem o objeto único. Coloquei então ID_PESSOA, NUMERO_CEP E COMPLEMENTO_CEP como chaves primarias do meu registro usando a notação @EmbeddedId (http://www.thejavageek.com/2014/05/01/jpa-embeddedid-example/)

Espero que isso possa ajudar vocês. Mais uma vez obrigado a todos.