Maison >Java >javaDidacticiel >JPA peut-il rechercher automatiquement les entités annotées avec @Entity ?

JPA peut-il rechercher automatiquement les entités annotées avec @Entity ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-04 15:06:141065parcourir

Can JPA Automatically Scan for Entities Annotated with @Entity?

Analyse automatique des entités dans persistence.xml

Dans l'API Java Persistence (JPA), les entités sont généralement déclarées dans le descripteur de déploiement persistence.xml en utilisant le élément. Cependant, existe-t-il un mécanisme permettant de rechercher automatiquement les entités annotées avec @Entity ?

La réponse est oui, mais avec certaines conditions et limitations.

Utiliser le "fichier jar" " Élément

Le fichier persistence.xml peut inclure un élément pour spécifier le(s) fichier(s) JAR contenant les classes d'entité. Le fournisseur JPA analysera ensuite le(s) fichier(s) JAR spécifié(s) à la recherche d'entités. Ceci est défini dans la spécification JPA et est pris en charge par la plupart des fournisseurs JPA, y compris Hibernate.

Exemple :

<persistence>
    <persistence-unit name="eventractor" transaction-type="RESOURCE_LOCAL">
        <jar-file>MyEventractor.jar</jar-file>
        <!-- Explicit listing of entity classes is still allowed -->
        <class>pl.michalmech.eventractor.domain.User</class>
        <class>pl.michalmech.eventractor.domain.Address</class>
        <class>pl.michalmech.eventractor.domain.City</class>
        <class>pl.michalmech.eventractor.domain.Country</class>

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="validate" />
            <property name="hibernate.show_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

Détection automatique spécifique à Hibernate (Java SE)

Dans Hibernate spécifiquement, même si la spécification JPA n'exige pas Dans ce cas, la détection automatique des entités est prise en charge même dans les applications Java SE. Pour activer cela, ajoutez la propriété suivante à votre unité de persistance :

<property name="hibernate.archive.autodetection" value="class, hbm" />

Cela permet à Hibernate de rechercher les classes annotées avec @Entity et les fichiers de mappage Hibernate (.hbm.xml) dans le fichier JAR spécifié par le element.

Limitations

Il est important de noter que s'appuyer sur l'analyse automatique des entités n'est pas toujours la meilleure pratique. Dans les scénarios où la visibilité du chemin de classe est dynamique ou où il existe plusieurs modules avec des définitions d'entités contradictoires, une liste de classes explicite peut fournir un meilleur contrôle.

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