-->
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.  [ 7 posts ] 
Author Message
 Post subject: ArrayList -> index non stocké
PostPosted: Thu Feb 02, 2006 3:44 am 
Newbie

Joined: Sat Dec 03, 2005 5:35 am
Posts: 11
Bonjour,

J'ai un problème avec un arraylist. Lors de l'insertion en base, la colonne d'index reste null.

Voici le mapping :
Code:
<list name="orders" table="orders_list" inverse="true" cascade="all">
   <key column="idPlayer"/>
   <index column="indexOrder"/>
   <one-to-many class="com.projet.characters.order.Order" />
</list>


J'utilise un save sur la classe qui contient l'objet "orders". Avec le système de cascade, l'insertion est déclenchée automatiquement.

Les données rentrées en base sont correct sauf pour la colonne "indexOrder" qui reste à vide.

Voici le code pour qui concerne la propriété "orders"
Code:
   /*
    * Order List
    */

   public List<Order> getOrders() {
      return ordersList;
   }

   public void setOrders(List<Order> orders) {
      this.ordersList = orders;
   }
   
   public void addOrder(Order order) {
      if (ordersList == null) {
         ordersList = new ArrayList<Order>();
      }
      ordersList.add(order);
   }


Avez-vous une idée ?


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 6:05 am 
Newbie

Joined: Thu Oct 09, 2003 6:57 am
Posts: 17
Location: France
Bonjour,

est ce qu'on peut voir les mapping de la classe order ?

- Tu as mis ton mapping a inverse=true, quand tu ajoute un order à la liste, est ce que cet Order contient bien l'objet parent ?

- Je ne sais pas si tu le fais mais, tu ne dois pas mapper le indexOrder dans le mapping de order

- essaye en rajoutant un insert=false et un update=false dans le mapping de order (Many-to-one)


A+


Top
 Profile  
 
 Post subject: Mapping de order
PostPosted: Thu Feb 02, 2006 8:08 am 
Newbie

Joined: Sat Dec 03, 2005 5:35 am
Posts: 11
Quote:
- Tu as mis ton mapping a inverse=true, quand tu ajoute un order à la liste, est ce que cet Order contient bien l'objet parent ?
- Je ne sais pas si tu le fais mais, tu ne dois pas mapper le indexOrder dans le mapping de order
- essaye en rajoutant un insert=false et un update=false dans le mapping de order (Many-to-one)


1) Je crois que oui : le many-to-one sur player.
2) non je ne l'ai pas fait
3) ok j'essaierai, mais pourquoi ?

Voici le mapping de order :

Code:
    <class name="com.projet.characters.order.Order" lazy="false" table="orders">

      <id name="id" column="idOrder" type="long">
           <generator class="hilo">
                <param name="table">hi_value</param>
                <param name="column">next_value</param>
           </generator>
      </id>
      <property name="name"/>
       <many-to-one name="player" class="com.projet.characters.Player" column="idPlayer"/>
      
       <joined-subclass name="com.projet.characters.order.WaitOrder" lazy="false" table="orders_wait">
          <key column="idOrder"/>
       </joined-subclass>
      
       <joined-subclass name="com.projet.characters.order.WalkOrder" lazy="false" table="orders_walk">
          <key column="idOrder"/>
          <many-to-one name="goal" class="com.projet.universe.zone.Zone" column="idGoal"/>
       </joined-subclass>

       <joined-subclass name="com.projet.characters.order.GetResourceOrder" lazy="false" table="orders_getresource">
          <key column="idOrder"/>
          <property name="resource"/>
          <property name="number"/>
       </joined-subclass>
      
      
   </class>


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 8:48 am 
Newbie

Joined: Thu Oct 09, 2003 6:57 am
Posts: 17
Location: France
Quote:
1) Je crois que oui : le many-to-one sur player.


Ce que je voulais dire, c'est est-ce-que tu fais bien un
order.setPlayer(playerParent);

avant de l'ajouter à la liste.

Quote:
3) ok j'essaierai, mais pourquoi ?


Documentation, chapitre 7.4.1 ( http://www.hibernate.org/hib_docs/v3/reference/fr/html/associations.html#assoc-bidirectional-m21
)

Quote:
Si vous utilisez une List (ou toute autre collection indexée) vous devez paramétrer la colonne key de la clé étrangère à not null, et laisser Hibernate gérer l'association depuis l'extrémité collection pour maintenir l'index de chaque élément (rendant l'autre extrémité virtuellement inverse en paramétrant update="false" et insert="false"):


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 9:50 am 
Newbie

Joined: Sat Dec 03, 2005 5:35 am
Posts: 11
Je vais essayer ca ce soir. Je vous tiendrai au courant.

J'avais bien vu cette partie de la documentation, mais je pensais qu'il ne s'agissait que de l'identifiant de chaque éléments (order dans mon cas).

Or l'identifiant de l'élément est correctement stocké en base, c'est l'index de l'élément qui n'est pas stocké.

Je vais essayer de clarifier : J'ai la liste d'ordre suivante par exemple
Code:
ArrayList : player.orders :
1 -> ordre1 (name1)
2 -> ordre2 (name2)


Je fais un save(player) et dans ma table order, je me retrouve avec 2 lignes :

Code:
ligne 1
id -> id généré automatiquement pour ordre1
name -> name1
idplayer -> player
indexOrder -> NULL

ligne 2
id -> id généré automatiquement pour ordre2
name -> name2
idplayer -> player
indexOrder -> NULL


La player parent est bien rempli, l'id de l'ordre aussi, la propriété name aussi, seul l'indexOrder n'est pas rempli.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 03, 2006 4:35 am 
Newbie

Joined: Sat Dec 03, 2005 5:35 am
Posts: 11
Mon erreur venait de là :

Code:
inverse="true"


Il ne fallait pas mettre de inverse="true" dans la déclaration de la list, car dans ce cas l'index du arraylist se trouvait déporté.

Merci de votre aide en tout cas.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 03, 2006 4:43 am 
Newbie

Joined: Thu Oct 09, 2003 6:57 am
Posts: 17
Location: France
Effectivement,

Mais d'après les docs il est conseillé de mettre inverse="true".
Mais si ça te convient comme ça tu peux laisser comme ça.

C'est pour ça que je te demandais si à chaque fois que tu ajoutais un order à la liste.
tu faisais bien un order.setPlayer(player).

bon courage


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