2017-06-08 1 views
0

je SQL natif qui retourne la collection d'objets et je voudrais obtenir les résultats que collection d'objets (une classe POJO qui est une entité non)Spring: JPA convertir SQL natif à l'entité non POJO

is it possible to get the results from native SQL as collection of non entity? 

I am using spring jpa 1.10 
+2

Vous cherchez [SqlResultSetMapping] (http://docs.oracle.com/javaee/5/api/javax/persistence/SqlResultSetMapping.html)? Cela fonctionne uniquement avec les versions JPA 2.1 ou supérieures. – harshavmb

+0

et si vous n'utilisez pas JPA 2.1 alors cela dépend de votre fournisseur JPA, mais vous ne dites pas lequel vous utilisez. Je sais que DataNucleus supporte une telle transformation pré-JPA 2.1 –

Répondre

1

Il n'y a aucun moyen de cartographier les classes non-entité dans JPA 1.

Depuis JPA 2.1, vous pouvez utiliser ConstructorResult, Utilisé conjointement avec l'annotation SqlResultSetMapping pour cartographier la clause SELECT d'une requête SQL à un constructeur.

Voici l'exemple

Query q = em.createNativeQuery(
     "SELECT c.id, c.name, COUNT(o) as orderCount, AVG(o.price) AS avgOrder " + 
     "FROM Customer c, Orders o " + 
     "WHERE o.cid = c.id " + 
     "GROUP BY c.id, c.name", 
     "CustomerDetailsResult"); 

    @SqlResultSetMapping(
     name="CustomerDetailsResult", 
     classes={ 
      @ConstructorResult(
       targetClass=com.acme.CustomerDetails.class, 
       columns={ 
        @ColumnResult(name="id"), 
        @ColumnResult(name="name"), 
        @ColumnResult(name="orderCount"), 
        @ColumnResult(name="avgOrder", type=Double.class) 
        } 
     ) 
     } 
    ) 
+0

Merci est-il possible d'avoir namedquery et de cartographier le pojo? – SAR

+0

@SAR http://www.concretepage.com/hibernate/native_query_hibernate_annotation peut vous aider – harshavmb

+1

@harshavmb merci, mais ce que j'ai est NON ENTITY, et c'est là que le problème se pose :) – SAR