hibernate HQL createQuery () () type de fonte de modéliser directement
Lorsque j'utilise list() de mise en veille prolongée (HQL) après createQuery(), alors je veux taper directement en fonte List<Object[]>
à mon List<POJO class>
. Je décris mon scénario ici. J'ai 3 Plain Old Java Objects dire Personne, de l'Exploitation et de Projet et d'une table-dire des Transactions avec l'étranger références à la Personne , de l'Exploitation et de Projet.
class Person {
String name;
//getters and setters
}
class Operation {
String name;
//getters and setters
}
class Project {
String name;
//getters and setters
}
class Transaction {
String p_id;
String o_id;
String project_id;
//refers to id of All three table above
}
Maintenant, je veux exécuter une Requête hql Langage de requête dire
String query="select p.name, o.name, project.name from Person p , Operation o, Project project , Transaction t where p.id=2 and p.id=t.p_id and o.id=t.o_id and project.id=t.project_id"
.
J'ai créé une classe de Modèle pour la sortie de cette requête dire POP_Model.
private class POP_Model {
String person_name;
String operation_name;
String project_name;
}
Maintenant, je veux utiliser Hibernate query:
Session session=HibernateConnection.getSessionFactory().openSession();
Query q=session.createQuery(query);
List<POP_Model> list=(List<POP_Model>)q.list();
Il donne transtypage d'erreur disant Object[] ne peut pas être convertie POP_Model. J'ai vérifié TypedQuery mais n'a pas obtenu un exemple pour elle. Mais autant que je sache, TypedQuery peut être utilisé pour la carte de POJO pas de Modèle. Je veux directement le type de fonte de Modèle.
"Les critères d'Api"? pouvez-vous consulter un lien pour cela.
OriginalL'auteur Misha | 2013-03-11
Vous devez vous connecter pour publier un commentaire.
Si vous êtes OK avec l'aide de l'API JPA (Hibernate implémente ainsi) au lieu de l'API Hibernate pour cela, vous pouvez utiliser JPQL constructeur de requêtes:
MODIFIER Il ressemble à Hibernate implémente constructeur expressions avec ses API ainsi:
EDIT2 JPA est un Java EE standard, l'unification de travail avec les différents persistance des bibliothèques comme la mise en veille prolongée et EclipseLink. Le oracle tutoriel est tout à fait décent.
Vous pouvez récupérer un EntityManager dans un non-EE application comme ceci:
ont ajouté un peu plus d'informations, espérons que cela pourra vous aider. OMI, vous ne devriez pas s'enliser dans l'apprentissage d'une nouvelle API, hibernate propose cette fonctionnalité en natif, je voudrais aller avec la version d'hibernate pour l'instant, keeeping JPA en tête pour plus tard.
merci de tonnes. J'ai utilisé de la session.createQuery() et il fonctionne avec succès..
cool, vous êtes les bienvenus 🙂 Si la réponse vous a été utile, vous pouvez le marquer comme acceptée
Ce qui aurait va se passer lors de ma requête retourne la liste des objets du Modèle? comme si je veux requête de ce
String query="select p.name, o.name, project.name from Person p , Operation o, Project project , Transaction t where p.id>2 and p.id=t.p_id and o.id=t.o_id and project.id=t.project_id
OriginalL'auteur kostja
D'abord créer un constructeur de la classe POJO.
Ensuite, vous pouvez utiliser
Pour Référence, voici la la documentation officielle.
Aller à travers Nouvel objet avec HQL.
OriginalL'auteur prayagupd