Comment cette Requête SQL dans hbm.xml le fichier peut être écrit dans le code source?
Je suis en train d'exécuter une requête SQL en mode veille prolongée. Je suis à l'aide de son la documentation.
En raison de certaines valeurs inconnues je suis en train de faire à l'intérieur du code Source.
Voir ci-dessous de code SQL de la Requête de configuration. Comment ré-écrire dans le code source lui-même!!
J'ai essayé ce
personList = session.createSQLQuery("SELECT person.NAME, person.AGE, person.SEX, address.STREET, address.CITY, address.STATE, address.ZIP FROM person JOIN address WHERE person.ID = address.PERSON_ID").addEntity(Person.class).addEntity(Address.class).list();
Ce que je suis en train de faire avec la requête ci-dessus est, il devrait la carte de la personne.ID & PERSON_ID. Si elle correspond, puis aller chercher les autres colonnes à l'ADRESSE[RUE, VILLE, ÉTAT, code POSTAL] table avec la PERSONNE colonnes de la table[NOM, l'ÂGE, le SEXE].
Dans JDBC les colonnes du jeu de résultats pour la requête ci-dessus ressemble à
NAME, AGE, SEX, STREET, CITY, STATE, ZIP
Mais sa ne marche pas il dit, l'adresse, les colonnes de la requête n'a pas été trouvé. Est-il une erreur de syntaxe dans ma version de la requête!!
Requête de Déclaration dans le fichier de mappage;
<sql-query name="personsWith">
<return alias="person" class="eg.Person"/>
<return-join alias="address" property="person.mailingAddress"/>
SELECT person.NAME AS {person.name},
person.AGE AS {person.age},
person.SEX AS {person.sex},
address.STREET AS {address.street},
address.CITY AS {address.city},
address.STATE AS {address.state},
address.ZIP AS {address.zip}
FROM PERSON person
JOIN ADDRESS address
ON person.ID = address.PERSON_ID
</sql-query>
Grâce
- Que voulez-vous vraiment atteindre? Êtes-vous sûr que vous avez besoin de ce genre à l'optimisation de la requête? Une simple requête sur la personne ou l'adresse n'est pas suffisant?
- En fait, je veux montrer à toutes les personnes avec l'adresse de l'info dans la table d'adresses.
- Je suis sûr que vous pourriez le faire dans un moyen trivial. Voir ma réponse.
Vous devez vous connecter pour publier un commentaire.
Deux possibles causes pour ne pas trouver le
address
colonnes:Tout d'abord, en SQL, vous devez écrire le nom de la table, pas le nom de l'entité.
Seconde, votre phrase pourrait être invalide au SQL. Il ya quelques façons de mettre en œuvre une jointure. Je vais prendre l'approche directe (sélectionnez à partir à la fois de table et en précisant le rejoindre à la clause where).
Suposing que le
person
entité correspond une table appelée "TABLE_PERSON
", etaddress
cartes de table "TABLE_ADDRESS
", une requête valide doit se présenter comme suit:Un point de plus. La vérification de la documentation hibernate, j'ai trouvé ça par exemple:
Donc, peut-être que le problème n'est pas à la requête elle-même, mais sur le jeu de résultats de la Cartographie que vous utilisez et la façon de référencer les champs.
Supposons que cette cartographie (à partir de la doc d'Hibernate):
Puis, comme le exaple unis, votre requête doit définir les colonnes entre les accolades (
{}
), et à l'aide de l'alias que vous avez défini lors de la cartographie:S'il vous plaît, dites-moi si l'un de ces exemples de travaux.
Il ne fonctionne pas à cause de votre mauvais usage de
AddEntity
:Ce morceau de code:
addEntity
ne ajouter un paramètre à la requête d'un type d'entité. Par exemple, vous pourriez faire ceci:Je ne sais pas si on pourrait faire la même entité de la cartographie dans le code. J'ai eu à lire la documentation.
Modifier:
Vous pouvez facilement rechercher toutes les personnes avec des adresses comme ceci:
ou, s'il n'y a pas un
adress
de propriété sur la personne:supposé que vous pourriez avoir plusieurs personnes sur la même adresse.