2009-07-07 4 views
2

Disons que j'ai deux tables - « Cat » et « propriétaire de chat » qui sont liés à plusieurs à un comme celui-ci:Mise en veille prolongée: Tri par un champ d'une table liée si la clé étrangère est nulle

<class name="com.example.Cat" table="cat"> 
     ... 
     <many-to-one name="owner" 
      class="com.example.CatOwner" 
      column="owner_id" 
      not-null="false" insert="true" update="true" cascade="none" lazy="false"/> 
</class> 

maintenant, je veux obtenir une liste de tous les chats classés par noms chat propriétaire, comme ceci:

session.createQuery("from Cat cat order by cat.owner.name"); 

Le problème est que si un chat ne possède pas, ce chat propriétaire (owner_id = NULL) a gagné » t être sélectionné avec cette requête. Comment puis-je faire des chats sans propriétaires pour être présents dans le résultat?

Merci.

Répondre

2

Jetez un coup d'œil aux documents Hibernate, 14.3. Associations and joins. Votre requête devrait être quelque chose comme:

 from Cat cat left join cat.owner owner order by owner.name
0

Dans SQL standard, il est un exemple typique d'un OUTER JOIN, donc la réponse rapide est en train d'écrire la requête comme:

session.createQuery("select cat from Cat cat, CatOwner cato WHERE cato.id(+) = cat.ownerId order by cato.name NULLS LAST"); 

NOTE: Je ne l'ai pas testé le code affiché! NOTE2: Je suppose qu'un Oracle RDBMS et hibernate.properties sont correctement configurés.

+0

Désolé, j'ai oublié de mentionner qu'il est dans mysql ... – serg

Questions connexes