adriencaubel.fr
@Entity
@OneToMany
mappedBy
Nous allons maintenant nous intéresser au problème de l'héritage
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
=> Comment représenter l'héritage en BDD ?
@Entity public class User { @Id private int id private String name; } @Entity public class Employee extends User { // Pas besoin de id, elle est hérité private int salary }
Nous avons 3 stratégie pour représenter l'héritage
TABLE_PER_CLASS
SINGLE_TABLE
JOINED
Chaque entité sera représentée par sa propre classe
Employee : ID | Name | Salary User : ID | Name
Pour les opérations CRUD aucun problème :
em.persist(...)
em.find(User.class, 1)
user.setName(...)
em.remove(user)
Nous allons avoir une table unique pour ces deux entités, avec l’ensemble des colonnes de User et Employee
User
Employee
User : ID | Name | Salary
DTYPE
employee.setSalary(10000)
em.remove(employee)
User : ID | Name | Salary | DTYPE
Une entité qui étend une autre entité est en relation 1:1 avec cette entité
User : ID | Name Employee : ID | Salary
L’ID dans User et Employee seront les mêmes pour un employee
em.persist(employee)
INSERT
em.find(Employee, 2)
DELETE
On précisera la stratégie d'héritage via l'annotation @Inheritance
@Inheritance
@Entity @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) public class User { }