Maison  >  Article  >  Java  >  Comment Hibernate implémente-t-il le mappage polymorphe ?

Comment Hibernate implémente-t-il le mappage polymorphe ?

王林
王林original
2024-04-17 12:09:01476parcourir

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données, fournissant les types de mappage suivants : join-subclass : créez une table séparée pour la sous-classe, comprenant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent joint toutes les colonnes de sous-classe.

Hibernate 如何实现多态映射?

Mappage polymorphe Hibernate : analyse approfondie

Introduction
Dans la programmation orientée objet, vous rencontrez généralement des situations où vous devez mapper des classes héritées à la base de données. Hibernate peut facilement répondre à cette exigence grâce à la fonctionnalité de mappage polymorphe.

Types de mappage polymorphes
Hibernate fournit plusieurs types de mappage polymorphes pour gérer les relations entre les classes héritées :

  • joined-subclass : Crée une table séparée pour chaque sous-classe, contenant le parent Toutes les colonnes dans la table de classe.
  • table-per-class : créez un tableau distinct pour chaque sous-classe, contenant uniquement des colonnes spécifiques à la sous-classe.
  • union-subclass : similaire à joined-subclass, mais réunit toutes les colonnes de sous-classe dans la table de classe parent. joined-subclass 类似,但在父类表中联合所有子类的列。

实战案例
假设我们有一个抽象类 Person,有两个子类 StudentTeacherPerson 类有 idname 字段,Student 类有 grade 字段,Teacher 类有 salary 字段。

Hibernate 映射配置
对于 Person 类:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Person {
  @Id
  private Long id;
  private String name;
  // ... 省略其他字段
}

对于 Student 类:

@Entity
public class Student extends Person {
  private Integer grade;
  // ... 省略其他字段
}

对于 Teacher

Cas pratique
Supposons que nous ayons une classe abstraite Personne et deux sous-classes Étudiant et Enseignant. La classe Person a les champs id et name, la classe Student a le grade champ, < La classe code>Enseignant a un champ salaire.

Configuration du mappage Hibernate

Pour la classe Personne :

@Entity
public class Teacher extends Person {
  private Integer salary;
  // ... 省略其他字段
}

Pour la classe Étudiant :
    Session session = sessionFactory.getCurrentSession();
    List<Person> persons = session.createQuery("from Person", Person.class).list();
  • Pour la classe Enseignant :
  • rrreee
  • Exemple de requête
  • Pour interroger tout le personnel, vous pouvez utiliser le code suivant :
rrreee

Hibernate chargera automatiquement les données de la sous-classe selon la stratégie d'héritage.

Avantages
  • Simplifiez le mappage des classes héritées.
Prend en charge les requêtes polymorphes pour récupérer toutes les données de sous-catégorie de manière cohérente. 🎜🎜Selon la stratégie d'héritage, la structure de la table peut être optimisée. 🎜🎜🎜🎜 REMARQUE 🎜🎜🎜🎜 Il est très important de choisir la stratégie d'héritage appropriée, qui affecte les performances et la convivialité des fonctionnalités. 🎜🎜Lorsque vous utilisez le mappage polymorphe, vous devez vous assurer que la structure de la table de base de données correspond à la configuration du mappage. 🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn