adriencaubel.fr
Nous avons introduit la spécification JPA
Maintenant, intéressons nous au Mapping Objet/Relationnel
L'impédance mismatch fait référence aux incompatibilités ou divergences conceptuelles et techniques entre la POO et les Bases de données relationnelles
Les ORM permettent de créer une correspondance entre un modèle objet et un modèle relationnel de base de données
// définit l'entité mappant la table « sport » dans le schéma par défaut @Entity @Table(name = "t_sport") public class Sport implements Serializable { // définit la clé primaire @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Integer id; // l'attribut « intitule » mappe la colonne « intitule » : optionnel car ont // le même nom, le mapping se ferait implicitement et par défaut @Column(name = "intitule") private String intitule; }
@Entity
@Table(name = "t_sport")
Par défaut le défaut de la nom de la table sera le nom de la classe
@Id
@GeneratedValue
@Column (optionnelle) permet de préciser plusieurs paramètre
@Column
Plusieurs paramètre
name
length
nullable
unique
@Column(name = "email", length = 255, nullable = false, unique = true) private String email;
Un composant, au contraire, est un objet sans identifiant, qui ne peut être persistant que par rattachement à une entité.
Societe | id | ... | rue | ville | code_postal | | | | | | | Client | id | ... | rue | ville | code_postal | | | | | | |
Via les composants nous n’avons pas à écrire l’ensemble des attributs dans nos deux classes Java mais pouvons coder une classe Adresse
Adresse
@Embeddable public class Adresse { @Column(name = "rue") private String rue; @Column(name = "ville") private String ville; @Column(name = "code_postal") private String codePostal; }
@Entity public class Client { @Id private Long id; private String nom; @Embedded private Adresse adresse; } @Entity public class Societe { @Id private Long id; private String nomEntreprise; @Embedded private Adresse adresse; }