Je suis sur une application Java Web donc en JEE (Je vous laisse d’ailleurs déplacer le sujet si nécessaire).

J'ai une base de données dont 3 tables ont une relation commune.

Voici une partie du MCD :
Nom : CapturePartMCD.JPG
Affichages : 300
Taille : 26,4 Ko

On obtiens donc le MLD :

Nom : CapturePartMLD.JPG
Affichages : 349
Taille : 36,8 Ko
On a donc une table intermédiaire.

J'ai créer mes classes java avec les annotations Hibernate afin de créer les tables dans la base :

Voici un peut de code (j'ai supprimer les constructeurs et les setters pour une meilleure lisibilité)

Classe Partenaire :
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
28
29
30
31
32
33
34
@SuppressWarnings("serial")@Entity
@Table
public class Partenaire implements Serializable{
    private int id_partenaire;
    private String nom_partenaire;
    private Client client;
    private Set <Affaire> affaire = new HashSet<Affaire>(0);
 
 
    @Column
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int getId_partenaire() {
        return id_partenaire;
    }
 
 
    @Column(name="nom_partenaire", nullable=false, length=255, unique=false)
    public String getNom_partenaire() {
        return nom_partenaire;
    }
 
 
    @OneToOne(fetch = FetchType.LAZY)
    public Client getClient() {
        return client;
    }
 
 
    @OneToMany(fetch = FetchType.LAZY)
    public Set<Affaire> getAffaire() {
        return affaire;
    }
}
Classe Client
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
28
29
30
31
32
33
34
@SuppressWarnings("serial")@Entity
@Table
public class Client implements Serializable{
    private int id_client;
    private String nom_client;
    private Set <Affaire> affaires = new HashSet<Affaire>(0);
    private Set <Partenaire> partenaire = new HashSet<Partenaire>(0);
 
 
    @Column
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int getId_client() {
        return id_client;
    }
 
 
    @Column(name="nom_client", nullable=false, length=255, unique=false)
    public String getNom_client() {
        return nom_client;
    }
 
 
    @OneToMany(fetch = FetchType.LAZY)
    public Set<Affaire> getAffaires() {
        return affaires;
    }
 
 
    @OneToMany(fetch = FetchType.LAZY)
    public Set<Partenaire> getPartenaire() {
        return partenaire;
    }
}
Classe Affaire :
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
28
29
30
31
32
@SuppressWarnings("serial")@Entity
@Table
public class Affaire implements Serializable{
    private int id_affaire;
    private String nom_affaire;
    private String poste;
    private String donneur_ordre;
    private Client client;
    private Partenaire partenaire;
 
 
    @Column
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public int getId_affaire() {
        return id_affaire;
    }
 
 
    @OneToOne(fetch = FetchType.LAZY)
    public Client getClient() {
        return client;
    }
 
 
    @OneToOne(fetch = FetchType.LAZY)
    public Partenaire getPartenaire() {
        return partenaire;
    }
 
 
}
Classe de la table intermédiaire RelationAffaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@SuppressWarnings("serial")@Embeddable
public class RelationAffaire implements Serializable{
 
 
    @Column(name="id_affaire")
    private int id_affaire;
    @Column(name="id_client")
    private int id_client;
    @Column(name="id_partenaire")
    private int id_partenaire;
 
 
 
}
EDIT : Je viens de voir un tuto qui disait de faire une classe RelationAffaireId (ou autre nom ^^)
Je vais voir mais mes tests pour le moment n'ont rien données de fonctionnel


Comme tel, je n'est aucune erreur mais dans ma base, je n'ai pas UNE tables intermédiaire mais TROIS :

Nom : CapturePhPAdmin.JPG
Affichages : 283
Taille : 15,8 Ko

Mon fichier hibernate.cfg.xml :
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
<!DOCTYPE hibernate-configuration PUBLIC    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sii</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL57InnoDBDialect</property>
 
        <mapping class="sii.dsi.beans.User"/>
        <mapping class="sii.dsi.beans.Partenaire"/>
        <mapping class="sii.dsi.beans.Client"/>
        <mapping class="sii.dsi.beans.Affaire"/>
        <mapping class="sii.dsi.beans.RelationAffaire"/>       
 
    </session-factory>
</hibernate-configuration>


Comment faire pour n'avoir q'une table intermédiaire ??

PS : 1ere fois que je fais du mapping Hibernate

Merci d'avance pour votre aide.