Java EE : Les relations JPA
Monday, June 6, 2011     17:19
  • Mon @ IP: 54.80.140.5



retour

Poster un commentaire ou une réponse

Les relations JPA

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:21:35

-----------RELATION ONE TO ONE bidirectionnelle--------------

diagramme de classe:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:21:57

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:25:41

Code:
@Entity
public class A implements Serializable {


private Integer idA;
private static final long serialVersionUID = 1L;

private B b;

public A() {
super();
}
@Id
public Integer getIdA() {
return this.idA;
}

public void setIdA(Integer idA) {
this.idA = idA;
}
@OneToOne
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}

}

@Entity
public class B implements Serializable {

private Integer idB;
private static final long serialVersionUID = 1L;

private A a;

public B() {
super();
}

@Id
public Integer getIdB() {
return this.idB;
}

public void setIdB(Integer idB) {
this.idB = idB;
}

@OneToOne(mappedBy = "b")
public A getA() {
return a;
}

public void setA(A a) {
this.a = a;
}

}


-----------> Résultat dans la base de donnée:
2 tables
A (master): idA + b_IDB (foreign key)
B(slave) : idB

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:26:00

-----------RELATION ONE TO ONE unidirectionnelle--------------

diagramme de classe:


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:27:22

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:32:10

Code:

@Entity
public class D implements Serializable {

private Integer idD;
private static final long serialVersionUID = 1L;

private C c;

public D() {
super();
}

@Id
public Integer getIdD() {
return this.idD;
}

public void setIdD(Integer idD) {
this.idD = idD;
}

@OneToOne
public C getC() {
return c;
}

public void setC(C c) {
this.c = c;
}

}


@Entity

public class C implements Serializable {


private Integer idC;
private static final long serialVersionUID = 1L;

public C() {
super();
}
@Id
public Integer getIdC() {
return this.idC;
}

public void setIdC(Integer idC) {
this.idC = idC;
}

}


-----------> Résultat dans la base de donnée:
2 tables :
D (id + c_Id koreign Key)
C (id)

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:33:01

-----------RELATION ONE TO MANY bidirectionnelle--------------

Diagramme de clase:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:34:40

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:39:04

Code:

@Entity
public class E implements Serializable {

private Integer idE;
private static final long serialVersionUID = 1L;

private List<F> fs;

public E() {
super();
}

@Id
public Integer getIdE() {
return this.idE;
}

public void setIdE(Integer idE) {
this.idE = idE;
}

@OneToMany(mappedBy = "e")
public List<F> getFs() {
return fs;
}

public void setFs(List<F> fs) {
this.fs = fs;
}
}


@Entity
public class F implements Serializable {

private Integer idF;
private static final long serialVersionUID = 1L;

private E e;

public F() {
super();
}

@Id
public Integer getIdF() {
return this.idF;
}

public void setIdF(Integer idF) {
this.idF = idF;
}

@ManyToOne
public E getE() {
return e;
}

public void setE(E e) {
this.e = e;
}
}

---------> Résultat dans la base de donnée:
2 tables:
E (slave) : idE
F (master): idF + e_idE

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:40:07

-----------RELATION ONE TO MANY unidirectionnelle--------------

Diagramme de classes:


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:41:29

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:46:23

Code:

@Entity
public class G implements Serializable {

private Integer idG;
private static final long serialVersionUID = 1L;

public G() {
super();
}
@Id
public Integer getIdG() {
return this.idG;
}

public void setIdG(Integer idG) {
this.idG = idG;
}
}

@Entity
public class H implements Serializable {

private Integer idH;
private static final long serialVersionUID = 1L;

private G g;

public H() {
super();
}
@Id
public Integer getIdH() {
return this.idH;
}

public void setIdH(Integer idH) {
this.idH = idH;
}
@ManyToOne
public G getG() {
return g;
}
public void setG(G g) {
this.g = g;
}
}

---------> Résultat dans la base de donnée:
2 tables:
G: IDG
H: IDH + g_IdG

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:47:41

-----------RELATION ONE TO MANY unidirectionnelle--------------

Diagramme de classes:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:47:50

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:50:28

Code:

@Entity
public class I implements Serializable {

private Integer idI;
private static final long serialVersionUID = 1L;

private List<J> js;

public I() {
super();
}

@Id
public Integer getIdI() {
return this.idI;
}

public void setIdI(Integer idI) {
this.idI = idI;
}

@OneToMany
public List<J> getJs() {
return js;
}

public void setJs(List<J> js) {
this.js = js;
}
}

@Entity

public class J implements Serializable {


private Integer idJ;
private static final long serialVersionUID = 1L;

public J() {
super();
}
@Id
public Integer getIdJ() {
return this.idJ;
}

public void setIdJ(Integer idJ) {
this.idJ = idJ;
}
}


----------> Résultat dans la base de donnée:
3 tables:
I: idI
J: idJ
I_J: I_idI + Js_idJ

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:51:46

-----------RELATION MANAY TO MANY bidirectionnelle--------------

Diagramme de classes:


Publicité

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:53:07

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-02-2015 à 09:55:19

Code:

@Entity
public class K implements Serializable {

private Integer idK;
private static final long serialVersionUID = 1L;

private List<L> ls;

public K() {
super();
}
@Id
public Integer getIdK() {
return this.idK;
}

public void setIdK(Integer idK) {
this.idK = idK;
}
@ManyToMany
public List<L> getLs() {
return ls;
}
public void setLs(List<L> ls) {
this.ls = ls;
}
}


@Entity
public class L implements Serializable {

private Integer idL;
private static final long serialVersionUID = 1L;

private List<K> ks;

public L() {
super();
}

@Id
public Integer getIdL() {
return this.idL;
}

public void setIdL(Integer idL) {
this.idL = idL;
}

@ManyToMany(mappedBy = "ls")
public List<K> getKs() {
return ks;
}

public void setKs(List<K> ks) {
this.ks = ks;
}
}

----------> Résultat dans la base de donnée:
3 tables:
K: idK
L: idL
K_L: ks_idK + ls_idL

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 09:39:36

-----------RELATION MANAY TO MANY porteuse de données--------------

Pour comprendre cette relation, on va prendre l'exemple d'un employé qui peut participer à plusieurs projets et un projet est réalisé par plusieurs employés.
La classe participation contient la date et le type du projet.
Diagramme de classes:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 09:51:18

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 09:52:51

Il nous est impossible de traduire directement la relation "many to many porteuse de données".
Pour cela on doit transformer le diagramme de classes comme suit:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:00:52

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:08:19

Code classe Employee:

package training.manyToManyWithData;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/**
* Entity implementation class for Entity: Employee
*
*/
@Entity
public class Employee implements Serializable {

private Integer id;

private static final long serialVersionUID = 1L;

private List<Participation> participations;

public Employee() {
super();
}

@Id
public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}

@OneToMany(mappedBy = "employee")
public List<Participation> getParticipations() {
return participations;
}

public void setParticipations(List<Participation> participations) {
this.participations = participations;
}

}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:09:01

Code classe Project:

package training.manyToManyWithData;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/**
* Entity implementation class for Entity: Project
*
*/
@Entity
public class Project implements Serializable {

private Integer id;

private static final long serialVersionUID = 1L;

private List<Participation> participations;

public Project() {
super();
}

@Id
public Integer getId() {
return this.id;
}

public void setId(Integer id) {
this.id = id;
}


@OneToMany(mappedBy = "project")
public List<Participation> getParticipations() {
return participations;
}

public void setParticipations(List<Participation> participations) {
this.participations = participations;
}

}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:12:46

Code classe Participation:


package training.manyToManyWithData;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

/**
* Entity implementation class for Entity: Participation
*
*/
@Entity
public class Participation implements Serializable {

private ParticipationId participationId;
private Date dateOfParticipation;
private String type;
private static final long serialVersionUID = 1L;

private Employee employee;
private Project project;

public Participation() {
super();
}

public Date getDateOfParticipation() {
return this.dateOfParticipation;
}

public void setDateOfParticipation(Date dateOfParticipation) {
this.dateOfParticipation = dateOfParticipation;
}

public String getType() {
return this.type;
}

public void setType(String type) {
this.type = type;
}

@EmbeddedId
public ParticipationId getParticipationId() {
return participationId;
}

public void setParticipationId(ParticipationId participationId) {
this.participationId = participationId;
}

@ManyToOne
@JoinColumn(name = "idEmployee", referencedColumnName = "id", insertable = false, updatable = false)
public Employee getEmployee() {
return employee;
}

public void setEmployee(Employee employee) {
this.employee = employee;
}

@ManyToOne
@JoinColumn(name = "idProject", referencedColumnName = "id", updatable = false, insertable = false)
public Project getProject() {
return project;
}

public void setProject(Project project) {
this.project = project;
}

}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:15:22

Code classe ParticipationId:
On doit spécifier "@Embeddable" qui signifie que c'est une classe ID.


package training.manyToManyWithData;

import java.io.Serializable;

import javax.persistence.Embeddable;

@Embeddable
public class ParticipationId implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer idEmployee;
private Integer idProject;

public ParticipationId() {
}

public Integer getIdEmployee() {
return idEmployee;
}

public void setIdEmployee(Integer idEmployee) {
this.idEmployee = idEmployee;
}

public Integer getIdProject() {
return idProject;
}

public void setIdProject(Integer idProject) {
this.idProject = idProject;
}

public ParticipationId(Integer idEmployee, Integer idProject) {
super();
this.idEmployee = idEmployee;
this.idProject = idProject;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((idEmployee == null) ? 0 : idEmployee.hashCode());
result = prime * result
+ ((idProject == null) ? 0 : idProject.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ParticipationId other = (ParticipationId) obj;
if (idEmployee == null) {
if (other.idEmployee != null)
return false;
} else if (!idEmployee.equals(other.idEmployee))
return false;
if (idProject == null) {
if (other.idProject != null)
return false;
} else if (!idProject.equals(other.idProject))
return false;
return true;
}

}

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:17:53

Pour générer les fonctions "equals" et "hashcode" on fait un clic droit "source" "Generate hashcode() and equals()" comme suit:

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:18:09

  abdou1987 :
nb posts:722
nb discussions:131
inscrit le :02-12-2014
le 05-03-2015 à 10:21:15

---------> Résultat dans la base de donnée:
3 tables:
Employee: id
Project: id
Participation: idEmployee,idProject, type, dateOfParticipation

Poster un commentaire ou une réponse :
Poster
     Ajouter un document à la discussion:
       

Actualité informatique et High-Tech

16-10-2015               lire

Dropbox propose aussi un outil d'écriture collaborative à son service

16-10-2015               lire

Bientôt des DRM dans des JPEG

17-04-2015               lire

Google propose une requête pour retrouver son téléphone

17-04-2015               lire

Youtube prépare une offre payante sans publicité

17-04-2015               lire

Sony Pictures : Des milliers de mails et documents confidentiels dévoilés

07-04-2015               lire

T411 bloqué par les FAI français

07-04-2015               lire

NVIDIA publie un pilote correctif et met à jour SHIELD Hub ainsi que GeForce Experience

07-04-2015               lire

Linkedin acquiert la start-up Refresh

03-04-2015               lire

Chromebit, la clé USB Google et Asus qui transforme n’importe quel écran en ordinateur

03-04-2015               lire

Une personne aurait pu supprimer toutes les vidéos d’une chaine Youtube en quelques secondes

03-04-2015               lire

Firefox 37 apporte un cryptage complémentaire à HTTPS

03-04-2015               lire

Windows XP, ce système qui ne veut pas mourir

02-04-2015               lire

Piratage de Labio.fr : le laboratoire répond à nos questions et ne payera pas la rançon

02-04-2015               lire

AWS lance des instances géantes avec 48 To de stockage

02-04-2015               lire

WhatsApp ajoute les appels gratuits et illimités à son application

31-03-2015               lire

Nadim Kobeissi : de Cryptocat à Peerio, du piratage au doctorat

31-03-2015               lire

L'Université de Nantes inaugure son datacenter modulaire taillé pour le HPC

31-03-2015               lire

GitHub victime d’une attaque DDoS majeure

27-03-2015               lire

Googlinette : les recherches de Google en devinettes

27-03-2015               lire

F8 : Facebook ouvre Messenger au e-commerce

27-03-2015               lire

À la SNCF, une fuite de données simple comme une touche F5

23-03-2015               lire

Des satellites GPS de Boeing affectés par une erreur technique

23-03-2015               lire

Plus de 700 000 routeurs ADSL vulnérables au piratage

23-03-2015               lire

Twitter sous le coup d’une action collective pour discrimination

22-03-2015               lire

Les montres connectées étaient déjà présentes dans les films, séries et dessins animés

22-03-2015               lire

Une Audi autonome va traverser les USA de SF à New York

20-03-2015               lire

Éclipse du Soleil : comment la suivre en direct sur Internet

20-03-2015               lire

Projet Leap : des bus 2.0 à San Francisco

20-03-2015               lire

Nvidia dévoile Drive PX, un système de conduite autonome

17-03-2015               lire

Embarquez pour Apollo 11, expérience virtuelle hors du commun

16-03-2015               lire

Ce jour où Google a exposé les données de 282 867 domaines

16-03-2015               lire

Yahoo publie le code de son plug-in de chiffrement mail

16-03-2015               lire

Après un an sans mise à jour, HAWKEN revient à la vie

12-03-2015               lire

Le big data au service du séquençage ADN pour accélérer les diagnostics

12-03-2015               lire

Clap de fin pour PlayStation Mobile

12-03-2015               lire

Apple : retour à la normale après une panne de plus de 11 heures

12-03-2015               lire

Ericsson va supprimer 2 200 postes en Suède

12-03-2015               lire

Le plan de Fleur Pellerin contre le piratage sur Internet

10-03-2015               lire

Apple Watch, Watch Edition et Watch Sport : de 399 à 18.000 euros !

10-03-2015               lire

Apple présente le “nouveau MacBook” qui remplace le MacBook Air

09-03-2015               lire

Google développe une version d'Android pour la réalité virtuelle

09-03-2015               lire

Quand la MPAA demande à Google de déréférencer son propre site

09-03-2015               lire

Heroes of the Dorm : un tournoi HotS avec 450 000 $ de bourses d'études à gagner

09-03-2015               lire

1 milliard d'adresses mails volées, 2 pirates inculpés

09-03-2015               lire

VMware accusé de violation de code Linux

09-03-2015               lire

Les drones civils bientôt immatriculés ?

05-03-2015               lire

7 sites qui permettent d’envoyer des fichiers de + ou – 2 Go

04-03-2015               lire

Smartphones : Apple passe en tête devant Samsung56% des consommateurs inquiets pour leurs données en Europe

04-03-2015               lire

Smartphones : Apple passe en tête devant Samsung

04-03-2015               lire

MWC 2015 : Onevisage pésente un scan facial 3D pour smartphones

04-03-2015               lire

Caméras sportives : Xiaomi s'attaque au monopole GoPro

04-03-2015               lire

Yi Camera, la caméra embarquée de Xiaomi à moins de 60€

04-03-2015               lire

Faille FREAK : quand des connexions SSL/TLS se contentent d'un chiffrement RSA sur... 512 bits

04-03-2015               lire

Bientôt des pubs sur Google Play (Android)

28-02-2015               lire

En partenariat avec "Positive Technologies", Esprit a l'honneur d'inviter ses étudiants à la 1ère édition de l’événement ESPRIT HACK DAYS dans les locaux d'ESPRIT Chotrana 2 et ce le 03 et le 04 Mars 2015.

28-02-2015               lire

La direction des stages d’ESPRIT et Ernst & Young ont le plaisir d'inviter ses étudiants à la journée de l’entreprise du mercredi 4 mars 2015 dans la salle E5 d’ESPRIT Factory.

25-02-2015               lire

Adobe fête les 25 ans de son logiciel Photoshop

25-02-2015               lire

Linux 4.0 : gros numéro et petite version

Haut de page.