[JPA/Hibernate] Mapper des Map

Mapper des Map [JPA/Hibernate] - Java - Programmation

Marsh Posté le 22-07-2009 à 17:46:15    

Bonjour,
 
pour poser le problème, voilà les tables que je veux mapper :
 

Code :
  1. Admin:
  2.     IDENT: String
  3.     ...
  4. Role:
  5.     ID: int
  6.     ...
  7. Pool:
  8.     ID: String
  9.     ...
  10. ADMIN_POOL:
  11.     FK_IDENT: String
  12.     FK_POOL: String
  13.     FK_ROLE: int
  14.     MAIL: boolean


 
Donc j'ai un objet Admin, qui possède des Pool, avec un rôle particulier sur le pool et une donnée pour savoir si on envoie des mails ou non.
(la base est imposée, reprise d'appli tout ça)
Donc j'aurai voulu un truc genre une Map<Role, AdministeredPool>, avec AdministeredPool un object avec un booléen et un Pool.
 
J'ai tenté ça :

Code :
  1. @Table(name = "ADMIN" )
  2. public class Admin {
  3.     //...
  4.     @CollectionOfElements
  5.     @JoinTable(name="ADMIN_POOL" )
  6.     private Map<Role, AdministeredPool> administeredPoolsMap = new HashMap<Role, AdministeredPool>();
  7.  
  8.     //...
  9. }


Mais Hibernate essaye de faire la jointure sur ADMIN_POOL.ADMIN_USER_PK_IDENT, ce qui marche peu.
 
Avec

Code :
  1. public class Admin {
  2.     //...
  3.     @CollectionOfElements
  4.     @JoinTable(name="ADMIN_POOL" )
  5.     private Map<Role, AdministeredPool> administeredPoolsMap = new HashMap<Role, AdministeredPool>();
  6.  
  7.     //...
  8. }


Je me tape carrément un NotYetImplementedException: Collections having FK in secondary table...
 
Je dois donc raté un truc quelque part. Je tatonne et ça me saoule... je trouve pas de doc sur un mapping de ce genre...
 
des idées ?


Message édité par brisssou le 23-07-2009 à 10:13:26

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

Marsh Posté le 22-07-2009 à 17:46:15   

Reply

Marsh Posté le 23-07-2009 à 09:50:02    

bon, j'ai trouvé une solution qui marche :

Code :
  1. @CollectionOfElements
  2. @JoinTable(
  3.    name="admin_pool",
  4.    joinColumns = @JoinColumn(name="fk_ident" )
  5. )
  6. @MapKeyManyToMany(joinColumns=@JoinColumn(name="fk_role" ))
  7. private Map<Role, AdministeredPool> administeredPoolsMap = new HashMap<Role, AdministeredPool>();
 

Le truc, c'est que je voudrais aussi les admin d'un pool selon leur rôle, donc je pense mapper une association du même type dans les pools, mais ça me semble pas terrible : c'est pas vraiment une association inverse... et je suis obligé de faire un autre composite, et ça ça craint.

Code :
  1. @CollectionOfElements
  2. @JoinTable(
  3.       name="admin_pool",
  4.       joinColumns = @JoinColumn(name="fk_pool" )
  5. )
  6. @MapKeyManyToMany(joinColumns=@JoinColumn(name="fk_role" ))
  7. private Map<Role, PoolAdmin> adminsMap = new HashMap<Role, PoolAdmin>();
 

une meilleure solution ?

 

edit:
Ah bha non, en fait c'est raté. Je veux des Map<Role, Set<PoolAdmin>> et Map<Role, Set<AdministratedPool>>. dans c'est pas encore ça...


Message édité par brisssou le 23-07-2009 à 10:13:04

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

Marsh Posté le 23-07-2009 à 11:23:27    

bon, ok.
 
Avec les annotations, pas de Map<k, Collection<V>>... galère.


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed