-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Mauvaise jointure avec un "order by" sur une nested property
PostPosted: Wed Jun 29, 2011 3:47 am 
Newbie

Joined: Tue Apr 22, 2008 10:01 am
Posts: 6
Bonjour,

J'ai un problème avec une requête HQL. J'essaie d'obtenir une liste triée d'objets "Connection" avec la requête suivante :
Code:
FROM Connection AS connection ORDER BY connection.message.status ASC


Quand je regarde la requête générée, il semblerait qu'Hibernate ajoute une clause JOIN :

Code:
select [...] from CONNECTION connection0_, MESSAGE message1_ where connection0_.ID_MESSAGE=message1_.SID_MESSAGE order by message1_.ID_STATUS ASC


Ce qui est normal, mais malheureusement c'est un INNER JOIN qui est ajouté par défaut. Du coup ma liste de résultats contient uniquement les "Connections" qui possèdent une référence vers la table MESSAGE. Les connections sans message ne sont pas renvoyées. Comment puis-je demander à Hibernate de remplacer cette jointure par un LEFT OUTER JOIN ?

Voilà le mapping entre Connection et Message.

Code:
public class Connection {

    ...

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="ID_MESSAGE", nullable=true)
    @ForeignKey(name = "FK_MESSAGE_CONNECTION")
    private Message message;

    ...

}


J'ai essayé d'ajouter "optional=true" à l'annotation ManyToOne, mais ça ne change rien.
J'ai essayé de rajouter les clause left outer join manuellement, mais la liste de résultats donne des données brutes et pas des objets persistants.


Top
 Profile  
 
 Post subject: Re: Mauvaise jointure avec un "order by" sur une nested property
PostPosted: Wed Jun 29, 2011 11:00 am 
Newbie

Joined: Tue Apr 22, 2008 10:01 am
Posts: 6
J'ai trouvé une solution en utilisant l'API Criteria que je décris ici : viewtopic.php?f=1&t=1011636&start=0

Mais je suis toujours à la recherche d'une solution en HQL qui retournerait des objets persistants et pas des données brutes.

EDIT : Finalement j'ai trouvé le problème de ma requête HQL. Il manquait la projection SELECT connection qui permet de retourner des objets Connection et non pas des List<Object>.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.