Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1361 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [résolu] Hibernate Annotations et oneToMany EAGER

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] Hibernate Annotations et oneToMany EAGER

n°1808027
brisssou
8-/
Posté le 04-11-2008 à 11:06:08  profilanswer
 

Edit final : Problème résolu avec les dernières versions de Spring, Hibernate et Hibernate-annotations. Je suppose donc un bug corrigé. mais le problème est toujours là en passant pas la requête telle qu'écrit plus bas, alors qu'en passant pas hibernateTemplate de Spring, le soucis est résolu. Spring ajoute  

Code :
  1. criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)


Je m'en vais donc relire la doc de Hibernate...
 
problème initial :
y a un truc que je comprends pas avec JPA là. J'ai ses deux classes :
 

Code :
  1. @Table(name = "address_book" )
  2. public class AddressBook implements Serializable {
  3.  
  4.     private static final long serialVersionUID = 4136348580478451825L;
  5.  
  6.     @Id
  7.     private Long id;
  8.  
  9.     @Column
  10.     private String name;
  11.     
  12.     @OneToMany(fetch=FetchType.EAGER)
  13.     @JoinColumn(name="address_book_id" )
  14.     private Set<Contact> contacts = new HashSet<Contact>();
  15.     
  16.     (get/set blabla...)
  17.  
  18.     @Override
  19.     public int hashCode() {
  20.         final int prime = 31;
  21.         int result = 1;
  22.         result = prime * result + (int) (id ^ (id >>> 32));
  23.         return result;
  24.     }
  25.  
  26.     @Override
  27.     public boolean equals(Object obj) {
  28.         if (this == obj)
  29.             return true;
  30.         if (obj == null)
  31.             return false;
  32.         if (getClass() != obj.getClass())
  33.             return false;
  34.         AddressBook other = (AddressBook) obj;
  35.         if (id != other.id)
  36.             return false;
  37.         return true;
  38.     }
  39.  
  40. }


et

Code :
  1. public class Contact implements Serializable {
  2.     private static final long serialVersionUID = 1L;
  3.     
  4.     @Id
  5.     private Long id;
  6.     
  7.     @Column
  8.     private String name;
  9.     
  10.     @Column
  11.     private String email;
  12.     
  13.     (get/set blabla...)
  14.  
  15.     @Override
  16.     public boolean equals(Object obj) {
  17.         if (this == obj)
  18.             return true;
  19.         if ((obj == null) || (obj.getClass() != this.getClass()))
  20.             return false;
  21.         Contact contact = (Contact) obj;
  22.         return (name == contact.name || (name != null && name
  23.                 .equals(contact.name)));
  24.     }
  25.  
  26.     @Override
  27.     public int hashCode() {
  28.         int hash = 7;
  29.         hash = 31 * hash + name.hashCode();
  30.         return hash;
  31.     }
  32.  
  33. }


 
Quand je fais cette requête :

Code :
  1. List list = getSession().createCriteria(AddressBook.class).list();


 
la liste contient autant d'AddressBook que j'ai de Contact, mais ce sont les mêmes instances de AddressBook qui sont répétées.
En clair, j'ai en base deux AddressBooks, le premier avec 2 Contacts, le second avec 3 Contacts. Et la liste rendu par HHH contient deux fois le premier AddressBook, et trois fois le second.
 
On dirait que l'ID de AddressBook n'est pas prise en compte. [:transparency]  
 
C'est la première fois que je joue avec JPA/Hibernate Annotations, si ça pue, merci de me flammer.
 
edit: alléger le code pour avoir que l'essentiel dans le post, c'est pas trop con finalement.
 
re-edit: Ça devient métaphysique. Si le FetchType est LAZY, ça fonctionne, je me retrouve avec juste deux AddressBooks dans la liste. Sauf que je veux pas que ce soit en LAZY, mais bien en EAGER, donc je voudrais comprendre


Message édité par brisssou le 04-11-2008 à 12:40:27

---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
mood
Publicité
Posté le 04-11-2008 à 11:06:08  profilanswer
 

n°1808091
brisssou
8-/
Posté le 04-11-2008 à 12:40:42  profilanswer
 

résolu


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [résolu] Hibernate Annotations et oneToMany EAGER

 

Sujets relatifs
[résolu] éviter de lister un repertoire (.htaccess)Problème d'accents après copie d'une base [résolu]
[Résolu] Paramétrer le "Java heap space" sur Tomcat[Résolu] link avec lib openssl sous linux
[RESOLU] [PHP] Génération de plusieurs vignettes[Dreamweaver] Centrage de calques [résolu]
[Résolu] Menu et sous menu-dynamique[résolu] Composant loader
[resolu]Verification 'variable || contenu champ table mysql'[Résolu]Débordement d'image dans pdf générer par FOP
Plus de sujets relatifs à : [résolu] Hibernate Annotations et oneToMany EAGER


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR