3 pièce(s) jointe(s)
Trois tables avec une relation
:salut:
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 :
Pièce jointe 407736
On obtiens donc le MLD :
Pièce jointe 407739
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:
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:
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:
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:
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 :
Pièce jointe 407748
Mon fichier hibernate.cfg.xml :
Code:
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.