IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

@MapKey sur un membre d'une clef composite


Sujet :

JPA Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut @MapKey sur un membre d'une clef composite
    Bonjour,

    nouvelle journée, nouveau problème... je voudrais réaliser une association OneToMany d'une classe container vers une série d'objets, le tout dans une HashMap dont la clef fait partie d'une clef composite de l'entité cible.

    PLus concrètement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    package com.etc.entity;
     
    @Entity
    @Table(name = "DEPARTEMENTS")
     public class Departement extends Entite {
     
    	@EmbeddedId
    	private DepartmentPK pk; // with 3 fields, including "code" (as String)  and their public getter/setter
     
    	@ManyToOne
    	private Societe societe;
     
    	public Societe getSociete() {
    		return societe;
    	}
    	public void setSociete(Societe societe) {
    		this.societe = societe;
    	}
     
      @Column(insertable=false, updatable=false)
    	public String getCode() {
    		return pk.getCode();
    	}
    }
     
     
    package com.etc.entity;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    @Entity
    @Table(name = "SOCIETE")
    public class Societe extends Entite {
     
    	public Societe() {
    		super();
    		departements = new HashMap<String, Departement>();
    	}
      //...
     
      @OneToMany(mappedBy = "societe")
    	@MapKey(name = "code")
    	private Map<String, Departement> departements;
     
    	public Map<String, Departement> getDepartements() {
    		return departements;
    	}
     
    }
    Seulement, ce code là (trouvé sur le net, mais sur un forum hibernate!) ne fonctionne pas...
    Exception Description: The map key [code] on the entity class [class com.etc.entity.Departement] could not be found for the mapping [org.eclipse.persistence.mappings.OneToManyMapping[departements]].
    Et c'est la même chose si j'enlève le getter getCode() et que je définis la MapKey avec "name=pk.code".

    Je ne sais plus trop bien comment m'en sortir à ce point... Quelqu'un aurait une idée?
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    @mapKey attend comme nom, le nom de la clé de l´entité departements et la tu lui dis que c´est code, et il n´arrive pas a savoir ou cela se trouve.
    fait @mapKey(name = "pk").
    Essaies voir.
    En pasant peux-tu nous faire voir la classe entité.

    Eric

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    La classe entité et une super classe permettant de réaliser notamment des audits.
    Je ne peux pas tout vous copier, mais en voici au moins la déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @MappedSuperclass
    @EntityListeners(EntiteAuditZoneListener.class)
    @SqlResultSetMappings({ @SqlResultSetMapping(name = "counterQuery", columns = { @ColumnResult(name = "COUNT") }), // for counting query
    		@SqlResultSetMapping(name = "maxQuery", columns = { @ColumnResult(name = "MAXI") }), // for max query
    		@SqlResultSetMapping(name = "sumQuery", columns = { @ColumnResult(name = "SOMME") }), // for sum query
    		@SqlResultSetMapping(name = "seqQuery", columns = { @ColumnResult(name = "SEQUENCE") }) // for sequence query
    })
    public abstract class Entite { 
    //....
    }
    Concernant ta suggestion, je crois que j'ai compris le principe, et de fait mon erreur. Effectivement, après correction ça va plus loin... vers une nouvelle erreur: il faut maintenant que je trouve moyen de préciser que l'insertion n'est pas "writable"...
    Ce que je sais pas faire avec ma relation @oneToMany / @mapKey... une idée?

    Exception [EclipseLink-48] (Eclipse Persistence Services - 1.1.2.v20090612-r4475): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: Multiple writable mappings exist for the field [DEPARTEMENT.DEP_SEQ]. Only one may be defined as writable, all others must be specified read-only.
    Mapping: org.eclipse.persistence.mappings.OneToOneMapping[Societe]
    Descriptor: RelationalDescriptor(com.etc.entity.Societe --> [DatabaseTable(DEPARTEMENT)])

    Exception [EclipseLink-48] (Eclipse Persistence Services - 1.1.2.v20090612-r4475): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: Multiple writable mappings exist for the field DEPARTEMENT.DEP_SEQ]. Only one may be defined as writable, all others must be specified read-only.
    Mapping: org.eclipse.persistence.mappings.OneToOneMapping[Societe]
    Descriptor: RelationalDescriptor(com.etc.entity.Departement --> [DatabaseTable(DEPARTEMENT)])
    Les membres de ma clef sont bien déclarés non nullable, et non insertable...

    Merci en tous cas déjà d'avoir regardé et répondu!!!
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  4. #4
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    ajoutes ceci sur ta liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @OneToMany(mappedBy = "societe", orphanRemoval="true")
    	private Map<String, Departement> departements;
    Eric

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Jeffray, je ne peux malheureusement pas tester ce paramètre... j'avais omis de préciser que je travaillais avec une version antédiluvienne de JPA (1.0).

    J'ai tenté le paramètre JoinColumns du côté "Département" / ManyToOne de l'association, en imposant sur chacune des colonnes de l'association les paramètres "insertable" et "nullable" à false...

    Ca compile. Bon, c'est un petit pas... merci déjà beaucoup pour cette avancée!
    Maintenant, il faut que je monte qqs tests case pour vérifier que tout est ok.
    Je reviendra ici préciser les résultats (et probablement pleurer pour de l'aide )
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Désolé d'avoir mis autant de temps pour confirmer que ça marchait bien.
    Merci encore!

    Je m'en vais trouver d'autres difficultés dans le même genre
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Update sur Select imbriqué partageant une clef commune
    Par srappaille dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/10/2010, 20h15
  2. Tri à bulle sur les membres d'une structure
    Par Jérôme.O[76] dans le forum C++
    Réponses: 3
    Dernier message: 02/10/2008, 14h29
  3. Réponses: 4
    Dernier message: 25/08/2008, 15h37
  4. Foreach sur les membres d'une classe
    Par titan_33 dans le forum C#
    Réponses: 10
    Dernier message: 16/04/2008, 09h39
  5. Pointeur sur le membre d'une matrice
    Par Linu6 dans le forum C
    Réponses: 7
    Dernier message: 13/01/2008, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo