Dans JPA 2.0, nous pouvons utiliser entityManager.CreAreAnativeQuery () pour exécuter des instructions SQL natives. Mais lorsque notre résultat de requête n'a pas de classe d'entité correspondante, Query.getResultList () renvoie une liste <objet []>. C'est-à-dire que les données de chaque ligne sont renvoyées sous forme de tableau d'objets.
L'utilisation commune est la suivante:
public void testNativeQuery () {Query Query = EntityManager.CreAreAnativeQuery ("SELECT ID, Name, Age from t_user"); List wows = query.getResultList (); pour (Row object: lignes) {objet [] cellules = (objet []) Row; System.out.println ("id =" + cellules [0]); System.out.println ("name =" + cellules [1]); System.out.println ("Age =" + Cellules [2]); }}De cette façon, cela rendra le code très difficile à comprendre. Qu'est-ce qu'un élément avec un indice de 0? On ne sait pas si vous ne comptez pas la déclaration de requête. De plus, une fois l'instruction de requête ajustée, le code Java doit également être ajusté ensemble. Pour le moment, nous pensons que si la carte est retournée, il sera beaucoup plus clair à utiliser.
Malheureusement, l'API de JPA ne fournit pas un tel paramètre. En fait, de nombreuses implémentations JPA sous-jacentes prennent en charge les objets de retour de retour.
Par exemple:
Query.Sethint d'EclipSelink (queryHints.result_type, resultetype.map); HiberNate's .SetResultTransformrer (Transformers.alias_to_entity_map);
Ainsi, si nous voulons retourner la carte et déterminer que la couche sous-jacente utilise une certaine implémentation JPA, nous pouvons passer à l'étape suivante et sacrifier les fonctionnalités de mise en œuvre de la mise en œuvre pour répondre à nos besoins:
public void testNativeQuery () {Query Query = EntityManager.CreAreAnativeQuery ("SELECT ID, Name, Age from t_user"); query.unwrap (sqlquery.class) .setResultRansformrer (transformateurs.alias_to_entity_map); List wows = query.getResultList (); pour (objet obj: lignes) {map row = (map) obj; System.out.println ("id =" + row.get ("id")); System.out.println ("name =" + row.get ("name")); System.out.println ("Age =" + Row.get ("Age")); }}La requête renvoie la méthode d'écriture du type de retour d'entité spécifié
Requête query = entityManager.CreAreAntierQuery ("SELECT ID, Nom, Age From t_user", user.class);Il convient de noter ici que l'utilisation de la carte est certainement moins efficace que l'utilisation de tableaux d'objets. Vous devez donc voir si la baisse des performances se situe dans la plage acceptable. Ensuite, dans mon environnement Hibernate 4.2.x, que vous écriviez des lettres majuscules ou des lettres minuscules dans votre SQL natif, les noms de champ retournés sont capitalisés. Bien sûr, vous pouvez traiter les noms de champ d'une certaine manière en personnalisant le résultat Resultime, et même renvoyer le pojo dont vous avez besoin.
La méthode ci-dessus pour permettre à l'interface de requête de requête de JPA de l'objet de retour de la carte est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.