9
votes

Sélectionnez des non-entités avec JPA?

est-il possible avec JPA de récupérer une instance d'une classe de non-entité avec des requêtes indigènes?
J'ai une classe de non entité qui enveloppe deux entités: xxx

Comment puis-je faire quelque chose comme ça? xxx


0 commentaires

3 Réponses :


18
votes

est-il possible avec JPA de récupérer une instance d'une classe de non entité avec des requêtes indigènes?

non. Les requêtes natives peuvent renvoyer des entités uniquement (si vous leur disiez de le faire en passant le résultatclass ou a résultatsseTemplage sur CreateNativeQuery méthode; si vous ne le faites pas, vous obtiendrez des collections de données brutes).

Dans JPQL, vous pouvez utiliser des expressions de constructeur (sélectionnez Nouveau ...) avec un constructeur de non-entité. Mais cela n'est pas pris en charge pour les requêtes indigènes, vous devrez le faire manuellement.


1 commentaires

Bonjour @pacal, j'essaie d'utiliser des expressions de constructeur avec un constructeur de non-entité. Mon SQL ressemble à ceci: Sélectionnez Nouveau com.company.ui.entityIDKey (C.CompanyID, C.Name) de la société C où c.CompanyID n'est pas NULL et C.NAME n'est pas null et de la longueur (c. .name)))> 0 ordre by c.name ASC et mon code JPA: Liste Sociétés = gettityManager (). Crééquery (SQL) .GETRESULTLIST (); mais je finis avec un avertissement de sécurité de type. Comment puis-je éviter cela?



-2
votes

Je pense que j'ai trouvé la solution. Il existe un moyen d'utiliser le nouveau mot-clé dans la construction de la requête. Ce que j'ai fait pour refuser ce problème:

    public List<ProductType> getProductByName(String productName) {
        String sqlQuery = "select DISTINCT **NEW** project1.ProductType(o.name, o.revision) from Lhproduct o where o.name = :prodname";
        Query qry = getEntityManager().**createQuery(sqlQuery);**
        qry.setParameter("prodname",productName);
        return qry.getResultList();
 }


2 commentaires

Mais Redfield demande d'utiliser l'opérateur nouveau dans la requête natale! Pas de requête JPA. Donc, il est possible d'utiliser cette requête comme créénativequery


Merci, mais ce n'est pas la réponse à la requête natale.



0
votes

Requête native JPA sans entité - en particulier avec des requêtes complexes (jointures récursives, multiples, etc.)?

Ceci a fonctionné pour moi, mais il est spécifique à l'hibernation: P>

import org.hibernate.transform.Transformers;

Query query = entityManagerFactory.createEntityManager().createNativeQuery(SQL);
// Transform the results to MAP <Key, Value>
query.unwrap(org.hibernate.SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
query.setParameter("myNamedParam", myParam);
List<Map<String, Object>> list = query.getResultList();
for (Map<String, Object> map : list) {
    System.out.println(map);
}


0 commentaires