Le mapping objet-relationnel (ORM)

Ce qu'un ORM fait correspondre : classe et table, attribut et colonne, association et clé étrangère, stratégies d'héritage ; chargement paresseux ou immédiat et problème des N+1 requêtes.

  • 29 cartes
  • 6 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Les chiffres
  5. Mises en situation
  6. Comprendre

Quelques cartes du deck

  • Mapping objet-relationnel (ORM) : de quoi s'agit-il ?

    Voir la réponse

    Technique et outil qui font correspondre les classes et objets d'un programme aux tables et lignes d'une base relationnelle, et génèrent le SQL à la place du programmeur.

    Hibernate (qui implémente la spécification JPA), SQLAlchemy ou l'ORM de Django en sont des exemples. Le SQL existe toujours : l'ORM l'écrit, et il faut savoir lequel il écrit.

  • Quelle annotation JPA, posée sur l'attribut auteur, place la clé étrangère auteur_id dans la table livre ?

    ```java
    @Entity
    class Livre {
    @Id Long id;
    String titre;
    Auteur auteur;
    }
    `

    • @ManyToOne
    • @OneToMany
    • @ManyToMany
    • @Column(name = "auteur_id")
    Voir la réponse

    @ManyToOne

    Plusieurs livres pour un auteur : c'est le côté « plusieurs » qui porte la clé étrangère, avec @ManyToOne, et son nom par défaut est auteur_id (@JoinColumn sert à en choisir un autre). @ManyToMany créerait une table d'association, et @Column décrit une colonne simple, pas une association.

  • Dans un ORM, une classe correspond à une …, un attribut à une … et un objet à une ….

    Voir la réponse

    Dans un ORM, une classe correspond à une table, un attribut à une colonne et un objet à une ligne.

    C'est la correspondance de base. Le reste (associations, héritage) en découle.

  • Entité : de quoi s'agit-il ?

    Voir la réponse

    Classe dont les instances correspondent à des lignes d'une table, chacune identifiée par une clé primaire que l'ORM suit.

    En JPA, on la marque avec @Entity et son identifiant avec @Id. Une classe sans cette marque n'est pas enregistrée en base.