-->
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.  [ 5 posts ] 
Author Message
 Post subject: la clause where dans @hibernate.list renvoie des objets null
PostPosted: Tue Feb 14, 2006 12:49 pm 
Newbie

Joined: Tue Feb 14, 2006 12:29 pm
Posts: 5
[b]Hibernate version: 3.0.5[/b]

[b]Mapping documents:[/b]

AdressImpl.java:
...

/*
* @hibernate.list ... where="deleted=0"
* ...
* @hibernate.one-to-many class=""... . PersonImpl"
*/
public List getPersonnes(){
return personnes;
}
...

[b]Name and version of the database you are using: MySQL 5.0 [/b]

'deleted' est un attribut de la Classe PersonImpl;

AdressImpl possède une LISTE dePersonImpl.

La blague :

getPersonnes renvoie effectivement une liste filtrée, c'est à dire sans les PersonImpl avec deleted!=0, mais en ayant mis "null" à leur place dans la liste, au lieu de renvoyer une liste de contenant effectivement que des Object non nul de type PersonImpl.

Je précise que le problème ne se pose pas si on utilise des @hibernate.set (au lieu des @hibernate.list)

Have Fun !


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 16, 2006 8:41 am 
Regular
Regular

Joined: Tue May 03, 2005 8:19 am
Posts: 53
Location: Paris
Le problème vient du fait que lorsque tu utilises une List qui est un ensemble ordonné, pour persister l'ordre Hibernate a besoin d'un attribut order dans ta table.
Lors de ta suppression logique l'attribut order n'est pas modifié, dont au chargement tu te retrouves avec des trous donc des null.

Si lors de ta suppression logique tu réordonnes ta liste, tu n'auras pas de null. Puisque plus de trous.

Si tu utilises un set, tu n'as donc pas besoin d'une collection ordonnée mais juste d'un ensemble d'éléments.

En espérant avoir été clair.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 17, 2006 9:42 am 
Newbie

Joined: Tue Feb 14, 2006 12:29 pm
Posts: 5
Mon problème, c'est que l'élément est toujours en base, il n'est juste pas remonté à cause de la clause 'where="deleted=0"', donc l'order n'a pas à être modifié à priori.
L'objet et son order existant toujours en base mais ne devant pas être présent dans la liste remonté par le getter, hibernate y place un objet null.

Désolé si je n'ai pas compris :'D


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 17, 2006 10:45 am 
Regular
Regular

Joined: Tue May 03, 2005 8:19 am
Posts: 53
Location: Paris
Tu demandes a Hibernate une liste ordonnée suivant un champ order en base.

Ton filtre ne te remonte pas certaines objets qui ont été supprimé logiquement.

Il est normal qu'Hibernate remonte donc des nulls, correspondant à l'ensemble des objets supprimés.

si tu as un objet avec delete=0 et order=2, Hibernate te remontera obligatoirement un null dans la liste en position 2.

Ce comportement est normal! Si tu n'as pas besoin d'ordonnacement utilise alors un Set. Si tu as besoin d'ordonnacement alors lors de la suppression fait un décalage des éléments suivants qui sont présent dans la liste.

Lors du remove d'un élément de ta List, java fait ce décalage pour toi, et lors de la sauvegarde de ta grappe d'objet, Hibernate persiste ce décalage et va faire l'ensemble des update des différents objets qui ont changé d'ordre.

En espérant avoir été plus clair.


Top
 Profile  
 
 Post subject: Re:
PostPosted: Mon Feb 20, 2006 11:47 am 
Newbie

Joined: Tue Feb 14, 2006 12:29 pm
Posts: 5
Tout à fait.

Merci beaucoup :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 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.