est-il possible avec JPA de récupérer une instance d'une classe de non-entité avec des requêtes indigènes? Comment puis-je faire quelque chose comme ça? p>
J'ai une classe de non entité qui enveloppe deux entités:
3 Réponses :
est-il possible avec JPA de récupérer une instance d'une classe de non entité avec des requêtes indigènes? p> blockQuote>
non. Les requêtes natives peuvent renvoyer des entités
uniquement fortes> (si vous leur disiez de le faire en passant le résultatclass code> ou arésultatsseTemplage code> surCreateNativeQuery code>méthode; si vous ne le faites pas, vous obtiendrez des collections de données brutes). p>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. p>
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 code> et mon code JPA: Liste
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();
}
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.
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);
}