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

Persistance des données Java Discussion :

Héritage et relation ManyToMany


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 45
    Par défaut Héritage et relation ManyToMany
    Bonjour, voici mon problème:

    J'ai la structure suivante :
    Une entité abstraite Véhicule :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Entity
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(name = "vehicule_type", discriminatorType = DiscriminatorType.STRING)
    @Table(name="vehicule")
    public abstract class Vehicule {
     
    	[...]
    }
    2 Entités qui héritent de la classe Véhicules :
    L'entité Voiture :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Entity
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
    @DiscriminatorValue("voiture")
    public class Voiture extends Vehicule {
    	@ManyToMany
    	@JoinTable(
    		name="societe_vehicule",
    		joinColumns=@JoinColumn(name="vehicule_id", referencedColumnName="vehicule_id"),
    		inverseJoinColumns=@JoinColumn(name="societe_id", referencedColumnName="societe_id")
    	)
    	private Collection<Societe> societes;
    }
    et l'entité Camion :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Entity
    @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
    @DiscriminatorValue("camion")
    public class Camion extends Vehicule {
    	@ManyToMany
    	@JoinTable(
    		name="societe_vehicule",
    		joinColumns=@JoinColumn(name="vehicule_id", referencedColumnName="vehicule_id"),
    		inverseJoinColumns=@JoinColumn(name="societe_id", referencedColumnName="societe_id")
    	)
    	private Collection<Societe> societes;
    }
    puis 1 autre entité Société qui a 2 relations ManyToMany vers les 2 entités :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Entity
    @Table(name="societe")
    public class Societe {
     
    	[...]
     
    	@ManyToMany(mappedBy="societes")
    	private Collection<Voiture> voitures;
     
    	@ManyToMany(mappedBy="societes")
    	private Collection<Camion> camions;
    }

    J'aimerais donc savoir comment faire pour avoir la liste des Voitures et la liste des Camions pour une société.
    Parce que avec cette structure, peut importe que j'ajoute des Voitures ou des Camions, il me dit que je n'ai que des Voitures.
    Par exemple, si j'ajoute 2 Voitures et 1 Camion, ça me retourne 3 Voitures et 0 Camion.

    Merci d'avance pour votre aide.

    PS: sachant que la structure de la BD est plus ou moins figée :
    [Vehicule]<=>[Societe_Vehicule]<=>[Societe]

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 45
    Par défaut
    D'après mes longues heures de recherche sur Google, peut-être que la solution serait du côté de @MappedSuperclass mais après quelque test, ça ne résout pas du tout mon problème.

    En fait, je souhaiterais juste que, quand Hibernate me donnes la liste des véhicules, il fasse une jointure supplémentaire pour vérifier le type de Véhicule:
    À la place de :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Societe_Vehicule
    j'aimerais avoir :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Societe_Vehicule WHERE Vehicule.type="voiture"
    (je sais que les requêtes ne sont pas très rigoureuses mais vous comprenez l'idée)
    Il ne me semble pas que cela soit trop compliqué pour un framework comme Hibernate ... mais je n'arrive pas à trouver la solution.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 45
    Par défaut
    En fait, il suffit d'utiliser l'annotation @Where (doc) comme ça :

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @Entity
    @Table(name="societe")
    public class Societe {
     
    	[...]
     
    	@ManyToMany(mappedBy="societes")
    	@Where(clause="vehicule_type='voiture'")
    	private Collection<Voiture> voitures;
     
    	@ManyToMany(mappedBy="societes")
    	@Where(clause="vehicule_type='camion'")
    	private Collection<Camion> camions;
    }
    Merci à mmerder du forum d'hibernate.org.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/02/2009, 01h37
  2. EJB3 Relation ManyToMany
    Par cow_boy17 dans le forum JPA
    Réponses: 1
    Dernier message: 21/03/2008, 10h12
  3. [Win'Design] héritage et relations problématiques
    Par samtheh dans le forum Autres
    Réponses: 1
    Dernier message: 26/11/2007, 11h00
  4. [HQL] Pb avec relation ManyToMany
    Par jc63 dans le forum Hibernate
    Réponses: 1
    Dernier message: 26/07/2007, 14h35
  5. [NHibernate.Mapping.Attributes] Relation ManyToMany
    Par anthyme dans le forum NHibernate
    Réponses: 2
    Dernier message: 12/07/2007, 20h34

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