No JPA 2.0, podemos usar o entityManager.createnativeQuery () para executar instruções nativas do SQL. Mas quando nosso resultado de consulta não possui uma classe de entidade correspondente, query.getResultList () retorna uma lista <objeto []>. Ou seja, os dados de cada linha são retornados como uma matriz de objetos.
O uso comum é o seguinte:
public void testNativeQuery () {Query Query = entityManager.CreatenativeQuery ("Selecione ID, nome, idade de t_user"); Listas linhas = query.getResultList (); for (linha do objeto: linhas) {objeto [] células = (objeto []) linha; System.out.println ("id =" + células [0]); System.out.println ("name =" + células [1]); System.out.println ("AGE =" + células [2]); }}Dessa forma, dificultará o código. O que exatamente é um elemento com um subscrito de 0? Não se sabe se você não conta a declaração de consulta. Além disso, uma vez que a instrução de consulta é ajustada, o código Java também deve ser ajustado juntos. Neste momento, achamos que, se o mapa for devolvido, será muito mais claro de usar.
Infelizmente, a API da JPA não fornece essa configuração. De fato, muitas implementações JPA subjacentes suportam objetos de retorno do mapa.
Por exemplo:
ECLIPSELink's Query.Sethint (Queryhints.result_type, resultType.map); Hibernate .SetResultTransformer (Transformers.alias_to_entity_map);
Portanto, se queremos devolver o mapa e determinar que a camada subjacente está usando uma determinada implementação da JPA, podemos dar o próximo passo e sacrificar os recursos de implementação cruzada para atender às nossas necessidades:
public void testNativeQuery () {Query Query = entityManager.CreatenativeQuery ("Selecione ID, nome, idade de t_user"); query.unwrap (sqlquery.class) .setResultTransformer (transformadores.alias_to_entity_map); Listas linhas = query.getResultList (); for (objeto obj: linhas) {map linha = (map) obj; System.out.println ("id =" + row.get ("id")); System.out.println ("name =" + row.get ("nome")); System.out.println ("Age =" + Row.get ("Age")); }}Consulta retorna o método de escrita do tipo de retorno de entidade especificado
Query Query = entityManager.CreatenativeQuery ("Selecione ID, nome, idade de t_user", user.class);Deve -se notar aqui que o uso do mapa é definitivamente menos eficiente do que o uso de matrizes de objetos. Portanto, você precisa ver se a queda de desempenho está dentro do intervalo aceitável. Então, no meu ambiente de Hibernate 4.2.x, não importa se você escreve letras maiúsculas ou letras minúsculas em seu SQL nativo, os nomes de campo retornados são capitalizados. Obviamente, você pode processar os nomes de campos de uma certa maneira, personalizando o resultado do resulta e até retornar o Pojo que você precisa.
O método acima para permitir que o objeto de mapa de retorno de consulta de consulta da JPA seja todo o conteúdo que eu compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.