Java >> Java tutorial >  >> Tag >> XML

En begyndervejledning til JPA's persistence.xml

I JPA er persistence.xml-filen den centrale del af konfigurationen. Det gør det til en af ​​de vigtigste filer i dit persistenslag. Så det skulle ikke overraske dig, at jeg optager et detaljeret foredrag om det til min kommende JPA for begyndere online træning. Og jeg tænkte, at det også er noget, jeg skulle dele her på bloggen.

Persistence.xml-filen definerer en eller flere persistensenheder, og du kan konfigurere ting som:

  • navnet på hver persistensenhed,
  • hvilke administrerede persistensklasser er en del af en persistensenhed,
  • hvordan disse klasser skal mappes til databasetabeller,
  • vedholdenhedsudbyderen, der skal bruges under kørsel,
  • den datakilde, du vil bruge til at oprette forbindelse til din database,
  • hvordan oprettes og valideres databaseskemaet,
  • tilstanden for din cache på 2. niveau,
  • flere udbyderspecifikke konfigurationsparametre.

Som du kan se, kan du konfigurere mange ting i denne fil. Men bare rolig, det er ikke så komplekst eller overvældende, som du kunne forvente. Lad os tage et kig på den mest grundlæggende konfiguration, før vi diskuterer alle de andre valgfrie elementer og egenskaber mere detaljeret.

Forskelle introduceret i JPA 3.0

Men før vi tager et kig på den første konfiguration, skal jeg tage fat på de ændringer, der blev introduceret i JPA 3.0. Som en del af transformationen fra Java EE til Jakarta EE blev Java Persistence API (JPA) omdøbt til Jakarta Persistence API (JPA). Desværre påvirkede dette også koden og konfigurationsfilerne. Præfikset "javax.persistence." skulle erstattes med "jakarta.persistence. ” i alle pakkenavne, konfigurationsegenskabsnavne og XML-navneområder.

Jeg vil nævne de forskellige ejendomsnavne i de følgende afsnit. For at gøre konfigurationseksemplerne nemmere at læse, vil jeg ikke inkludere XML-navneområdedeklarationerne.

Hvis du bruger JPA 2.x (EclipseLink <3.0, Hibernate <5.5.0), bør du bruge følgende navnerum.

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xsi:schemalocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="my-persistence-unit">
        ...
    </persistence-unit>
</persistence>

Og hvis du bruger JPA 3.x, bør du bruge de opdaterede navnerum.

<persistence xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:schemalocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
    <persistence-unit name="my-persistence-unit">
        ...
    </persistence-unit>
</persistence>

Den mest grundlæggende persistence.xml-konfiguration

Du kan bruge JPA med en meget kort, grundlæggende konfiguration. Du behøver kun en vedholdenhed element som rodelement og en persistence-unit element med et navn attribut. Attributten bruges til at identificere persistensenheden, og du kan bruge den under bootstrapping-processen til at instantiere en specifik EntityManagerFactory .

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
	</persistence-unit>
</persistence>

Når du bruger denne konfiguration, konfigurerer du en persistensenhed med navnet "my-persistence-unit ” uden at definere en afhængighed af en specifik implementering af Den Blandede Parlamentariske Forsamling. Du stoler også på en liste over standardindstillinger defineret af specifikationen:

  • Din persistensudbyder scanner roden af ​​din persistensenhed og føjer alle kommenterede administrerede persistensklasser til persistensenheden.
  • Hvis din META-INF biblioteket indeholder en fil kaldet orm.xml , bliver den behandlet som en kortfil, og alle inkluderede kortoplysninger bliver brugt.
  • Den anvendte transaktionstype afhænger af det miljø, du implementerer din applikation i. I et Jakarta EE-miljø forventer JPA, at containeren leverer en JTA-kompatibel forbindelsesudbyder. I et Java SE-miljø bruger den en RESOURCE_LOCAL transaktion i stedet.
  • Du konfigurerer ikke nogen databaseforbindelse. JPA forventer derfor, at du leverer en datakilde under kørsel.
  • Alle JPA-implementeringer understøtter et sæt proprietære konfigurationsparametre. Eksempler på det er logningskonfigurationen i EclipseLink JPA eller Hibernates databasedialekt. Da du ikke definerer nogen af ​​dem i denne grundlæggende konfiguration, stoler du også på alle udbyderspecifikke standardindstillinger.

Valgfrie konfigurationselementer, du bør kende

At have en grundlæggende konfiguration gør det nemt at komme i gang. Men i de fleste af dine projekter har du brug for mere end det. Du skal muligvis referere til en specifik datakilde, inkludere administrerede klasser fra en anden jar-fil, aktivere cachen på 2. niveau eller inkludere en ekstern kortlægningskonfiguration.

Så lad os tage et kig på JPA's valgfri konfigurationselementer, og hvad de sætter dig i stand til at gøre.

Giv en beskrivelse af din persistensenhed

Nogle gange er et meningsfuldt navn ikke nok. Især i større, mere komplekse implementeringer, der inkluderer flere persistensenheder, er det en god praksis at give en kort beskrivelse, der fortæller mere om brugen og formålet med hver persistensenhed. Du kan gøre det med beskrivelsen element.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<description>This is a short text describing my persistence unit.</description>
	</persistence-unit>
</persistence>

Angiv de administrerede klasser, der er inkluderet i din persistensenhed

Som standard inkluderer din JPA persistence-enhed alle kommenterede administrerede klasser, der findes i dens rod. Hvis du vil inkludere klasser, der er placeret et andet sted, kan du enten henvise til dem eksplicit eller inkludere alle klasser fra en jar-fil.

Medtag en eller flere specifikke administrerede klasser

Ved at tilføje en eller flere klasser elementer til din persistensenhed-konfiguration, kan du tilføje klasser til din persistensenhed, som ikke er i roden af ​​persistensenheden. Hvert klasseelement skal indeholde det fuldt refererede navn på en klasse. Vær opmærksom på, at disse klasser skal være tilgængelige på din klassesti.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<class>org.thoughts.on.java.jpa.beginners.Professor</class>
	</persistence-unit>
</persistence>

Medtag administrerede klasser fra andre jar-filer

Brug af flere klasser elementer til at tilføje en lang liste af administrerede klasser til din persistensenhed kan være en besværlig opgave. Det er ofte nemmere at bruge en eller flere jar-filer elementer for at tilføje alle administrerede klasser indeholdt i disse jar-filer.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<jar-file>my-entities.jar</jar-file>
	</persistence-unit>
</persistence>

Ekskluder ikke-opførte klasser

Du kan ikke kun tilføje klasser til din persistens-enhed, som ikke er i roden, du kan også ekskludere klasser, som ville blive tilføjet som standard. For at gøre det skal du først bruge en eller flere klasser elementer for eksplicit at specificere, hvilke administrerede klasser der skal være en del af persistensenheden. I det næste trin kan du bruge ekskluder-ikke-listede-klasserne element for at udelukke alle klasser fra persistence-enheden, som ikke var eksplicit inkluderet.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<class>org.thoughts.on.java.jpa.beginners.Professor</class>
		<exclude-unlisted-classes>true</exclude-unlisted-classes>
	</persistence-unit>
</persistence>

Referer til en tilknytningsfil

Annoteringer er den mest almindelige, men ikke din eneste mulighed for at definere tilknytningen mellem dine entiteter og databasetabeller. Du kan også bruge eksterne, XML-baserede kortlægningsfiler. Som standard tjekker din persistensudbyder, om META-INF-mappen indeholder en fil kaldet orm.xml og inkluderer dens kortlægningsoplysninger. Som jeg forklarede i et tidligere indlæg, flettes de kortlægningsdefinitioner, der leveres via annoteringer og i kortlægningsfilerne, under installationen, og oplysningerne i kortlægningsfilen har forrang.

Hvis du vil bruge flere kortlægningsfiler, eller hvis navnet på din fil ikke matcher standardnavnemønsteret, kan du bruge en eller flere mapping-filer elementer til at referere til de filer, der skal bruges sammen med din persistence-enhed.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<mapping-file>file:\\\C:\dev\wrk\XmlMapping\XmlMappings\myMappings.xml</mapping-file>
	</persistence-unit>
</persistence>

Brug en specifik persistensudbyder

Hvis du bruger proprietære funktioner hos din persistensudbyder, bør du angive en afhængighed af den. Du kan gøre det ved at definere navnet på den klasse, der implementerer jakarta.persistence.spi.PersistenceProvider grænsefladen (eller javax.persistence.spi.PersistenceProvider interface, hvis du bruger JPA 2.x) i udbyderen element.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
	</persistence-unit>
</persistence>

Reference til en datakilde

jta-data-kilden og non-jta-data-source elementer bruges mest i Jakarta EE-miljøer. De giver dig mulighed for at henvise til JNDI-navnet på en datakilde, der er eller ikke er kompatibel med Java Transaction API. Hvis du ikke bruger nogen af ​​disse to elementer, skal du enten konfigurere en standard JTA-datakilde for din container eller angive JNDI-navnet på en datakilde ved implementeringstidspunktet.

Og hvis du bruger JPA i et Java SE-miljø, kan du enten bruge et af disse to elementer til at referere til en datakilde eller bruge et sæt egenskaber til at konfigurere din databaseforbindelse.

Jeg bruger jta-data-kilden parameter i følgende eksempel for at referere til en JTA-datakilde.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<jta-data-source>java:app/jdbc/MyDataSource</jta-data-source>
	</persistence-unit>
</persistence>

Aktiver 2. niveaus cache

Cachen på 2. niveau, som er defineret af JPA-specifikationen, er et af de større emner i min Hibernate Performance Tuning Online Training. Du bør bruge den til at cache enheder, som du ofte læser, men kun sjældent ændrer. Den er som standard deaktiveret. Du kan aktivere cachen og angive dens tilstand med delt-cache-tilstanden element.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
	</persistence-unit>
</persistence>

Du kan vælge mellem 4 forskellige muligheder:

  1. ALLE – For at cache alle enheder
  2. INGEN – For at cache ingen af ​​dine enheder (standard)
  3. ENABLE_SELECTIVE – For kun at cache de entiteter, der er kommenteret med @Cacheable eller @Cacheable(true)
  4. DISABLE_SELECTIVE – For at cache alle enheder, der ikke er kommenteret med @Cacheable(false)

Jeg anbefaler altid at bruge ENABLE_SELECTIVE, fordi det kræver, at du annoterer en enhed, før den bliver cachelagret. Så du bør ikke sænke din applikation ved ved et uheld at cache en enhed, der ikke skal cachelagres.

Deaktiver automatisk validering af dine enheder

Som jeg forklarede mere detaljeret i min artikel Sådan validerer du automatisk enheder med Hibernate Validator, integrerer JPA med bønnevalideringsspecifikationen. Dette giver dig mulighed for automatisk at validere værdierne af dine enhedsattributter, før de bliver ved med at blive ved med at blive opdateret. De 3 forskellige værdier understøttet af valideringstilstanden element giver dig mulighed for at aktivere eller deaktivere valideringen:

  1. AUTO – Udfør valideringen, hvis en bean-valideringsimplementering er tilgængelig (standard)
  2. Tilbagekald – Aktiver valideringen og smid en undtagelse, hvis ingen bønnevalideringsimplementering er tilgængelig
  3. INGEN – Udfør ikke nogen validering
<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<validation-mode>CALLBACK</validation-mode>
	</persistence-unit>
</persistence>

Definer yderligere egenskaber

Ud over de tidligere beskrevne XML-elementer kan du bruge egenskaberne element for at konfigurere yderligere standard- og leverandørspecifikke parametre og tip.

Konfigurer timeouts

Du kan bruge egenskaberne jakarta.persistence.lock.timeout og jakarta.persistence.query.timeout (eller javax.persistence.lock.timeout og javax.persistence.query.timeout i JPA 2.x) for at definere den pessimistiske låse-timeout og forespørgsels-timeout i millisekunder. Disse er blot tip, og din vedholdenhedsudbyder bruger dem måske eller måske ikke. Det afhænger af den persistensudbyder, du bruger i dit projekt, og den database, som den forbinder til.

<persistence>
	<persistence-unit name="my-persistence-unit">
		<properties>
			<! – JPA 3.x – >
			<property name="jakarta.persistence.lock.timeout" value="100"/>
			<property name="jakarta.persistence.query.timeout" value="100"/>

			<! – JPA 2.x – >
			<! – property name="javax.persistence.lock.timeout" value="100"/>
			<property name="javax.persistence.query.timeout" value="100"/ – >
		</properties>
	</persistence-unit>
</persistence>

Angiv valideringsgrupper

Hvis du aktiverer den automatiske validering eller stoler på standardadfærden, kan du definere brugerdefinerede grupper, som bliver valideret, før persistensudbyderen udfører persist-, opdaterings- eller fjernoperationerne. Du kan konfigurere en eller flere grupper for hver livscyklustilstandsændring ved at bruge egenskaberne:

  • JPA 3.x
    • jakarta.persistence.validation.group.pre-persist
    • jakarta.persistence.validation.group.pre-update og 
    • jakarta.persistence.validation.group.pre-remove
  • JPA 2.x
    • javax.persistence.validation.group.pre-persist
    • javax.persistence.validation.group.pre-update og 
    • javax.persistence.validation.group.pre-remove .
<persistence>
	<persistence-unit name="my-persistence-unit">
		<properties>
			<! – JPA 3.x – >
			<property name="jakarta.persistence.validation.group.pre-persist" value="jakarta.validation.groups.MyPersistValidation"/>
			<property name="jakarta.persistence.validation.group.pre-update" value="jakarta.validation.groups.MyUpdateValidation"/>
			<property name="jakarta.persistence.validation.group.pre-remove" value="jakarta.validation.groups.MyRemovetValidation"/>

			<! – JPA 2.x – >
			<! – property name="javax.persistence.validation.group.pre-persist" value="javax.validation.groups.MyPersistValidation"/>
			<property name="javax.persistence.validation.group.pre-update" value="javax.validation.groups.MyUpdateValidation"/>
			<property name="javax.persistence.validation.group.pre-remove" value="javax.validation.groups.MyRemovetValidation"/ – >
		</properties>
	</persistence-unit>
</persistence>

Konfigurer en databaseforbindelse i Java SE

I et Java SE-miljø har du muligvis ikke en datakilde, som du kan referere til for at definere databaseforbindelsen. I disse situationer kan du bruge følgende sæt egenskaber til at angive JDBC-driverklassen, forbindelses-URL'en og de loginoplysninger, som din persistensudbyder skal bruge til at oprette forbindelse til databasen:

  • jakarta.persistence.jdbc.driver / javax.persistence.jdbc.driver
    Det fuldt kvalificerede klassenavn på din JDBC-driver
  • jakarta .persistence.jdbc.url / javax.persistence.jdbc.url
    Forbindelses-URL'en til din database
  • jakarta .persistence.jdbc.user / javax.persistence.jdbc.user
    Brugernavnet til at logge ind på din database
  • jakarta .persistence.jdbc.password / javax.persistence.jdbc.password
    Adgangskoden til at logge ind på din database
<persistence>
	<persistence-unit name="my-persistence-unit">
		<properties>
			<! – JPA 3.x – >
			<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver" />
			<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/jpaForBeginners" />
			<property name="jakarta.persistence.jdbc.user" value="postgres" />
			<property name="jakarta.persistence.jdbc.password" value="postgres" />

			<! – JPA 2.x – >
			<! – property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/jpaForBeginners" />
			<property name="javax.persistence.jdbc.user" value="postgres" />
			<property name="javax.persistence.jdbc.password" value="postgres" / – >
		</properties>
	</persistence-unit>
</persistence>

Opret og initialiser databasen

Siden version 2.1 kan JPA oprette en ny database ved opstart og initialisere den med et foruddefineret datasæt. Men før du bruger denne funktion i din applikation, skal du være opmærksom på, at den ikke er så kraftfuld og fleksibel som en versionsbaseret databasemigrering, som jeg viste dig i mine selvstudier om Flyway og Liquibase.

Du kan aktivere og konfigurere denne funktion ved at tilføje følgende egenskaber til din konfiguration:

  • jakarta.persistence.schema-generation.database.action / javax.persistence.schema-generation.database.action
    Den handling, du vil udføre for at administrere databaseskemaet. Understøttede værdier er ingen (standard), opret , slip-og-opret og slip . Som du sikkert forventer, er opret option opretter databaseskemaet ved opstart, drop-and-create sletter den eksisterende database og opretter en ny og slip fjerner bare den eksisterende database.
  • jakarta.persistence.schema-generation.create-script-source / javax.persistence.schema-generation.create-script-source
    Navnet eller filens URL til det script, der opretter databasen.
  • jakarta.persistence.schema-generation.drop-script-source / javax.persistence.schema-generation.drop-script-source
    Navnet eller filens URL til scriptet, der sletter databasen.
  • jakarta.persistence.sql-load-script-source / javax.persistence.sql-load-script-source
    Navnet eller filens URL til scriptet, der initialiserer databasen med et foruddefineret datasæt.
<persistence>
	<persistence-unit name="my-persistence-unit">
		<properties>
			<! – DON'T USE THIS IN PRODUCTION – >
			<! – automatically drop and create required database tables – >

			<! – JPA 3.x – >
			<property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create" />
			<property name="jakarta.persistence.schema-generation.create-script-source" value="create-db.sql" />
			<property name="jakarta.persistence.schema-generation.drop-script-source" value="drop-db.sql" />
			<property name="jakarta.persistence.sql-load-script-source" value="data.sql" />

			<! – JPA 2.x – >
			<! – property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
			<property name="javax.persistence.schema-generation.create-script-source" value="create-db.sql" />
			<property name="javax.persistence.schema-generation.drop-script-source" value="drop-db.sql" />
			<property name="javax.persistence.sql-load-script-source" value="data.sql" / – >
		</properties>
	</persistence-unit>
</persistence>

Generer dine databasescripts

Og hvis du ikke har nogen SQL-scripts til at oprette eller slette din database, kan du oprette dem baseret på dine enhedstilknytninger. Men vær opmærksom på, at disse scripts ofte skal tilpasses og optimeres, før du kan bruge dem i produktionen. Men de er et godt udgangspunkt, og at optimere dem er ofte meget hurtigere end at skrive alt selv.

Du kan bede din persistensudbyder om at generere disse scripts ved at konfigurere følgende egenskaber:

  • jakarta.persistence.schema-generation.scripts.action / javax.persistence.schema-generation.scripts.action
    Den slags scripts, du vil generere. Understøttede værdier er ingen (standard), opret , slip-og-opret og slip .
  • jakarta .persistence.schema-generation.create-source / javax.persistence.schema-generation.create-source
    Det grundlag, som du ønsker at oprette databasen på. Du kan vælge mellem metadata , script , metadata-then-script og script-så-metadata .
  • jakarta .persistence.schema-generation.drop-source / javax.persistence.schema-generation.drop-source
    Det grundlag, du ønsker at droppe databasen på. Du kan vælge mellem metadata , script , metadata-then-script og script-så-metadata .
  • jakarta .persistence.schema-generation.scripts.create-target / javax.persistence.schema-generation.scripts.create-target
    Den placering, hvor du vil gemme det genererede oprettelsesscript.
  • jakarta .persistence.schema-generation.scripts.drop-target / javax.persistence.schema-generation.scripts.drop-target
    Det sted, hvor du vil gemme det genererede drop-script.
<persistence>
	<persistence-unit name="my-persistence-unit">
		<properties>
			<! – JPA 3.x – >
			<property name="jakarta.persistence.schema-generation.scripts.action" value="drop-and-create"/>
			<property name="jakarta.persistence.schema-generation.scripts.create-target" value="./create.sql"/>
			<property name="jakarta.persistence.schema-generation.scripts.drop-target" value="./drop.sql"/>

			<! – JPA 2.x – >
			<! – property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/>
			<property name="javax.persistence.schema-generation.scripts.create-target" value="./create.sql"/>
			<property name="javax.persistence.schema-generation.scripts.drop-target" value="./drop.sql"/ – >
		</properties>
	</persistence-unit>
</persistence>

Nogle standard persistence.xml-konfigurationer

OK, du kender nu de forskellige elementer og egenskaber, som du kan bruge i filen persistence.xml. Lad os kombinere dem til et par standardkonfigurationer, der passer godt til projekter, der bruger Hibernate eller EclipseLink.

Jeg vil bruge pakke- og egenskabsnavnene defineret af Jakarta Persistence API-specifikationen. Hvis du vil bruge den ældre Java Persistence API, skal du sørge for at erstatte alle forekomster af "jakarta.persistence" med "javax.persistence".

Konfigurationer til dvale

Inkluder alle administrerede klasser fra ekstern jar-fil, referer til en datakilde og angiv dialekten

Følgende konfiguration for Hibernate tilføjer alle administrerede persistensklasser fra roden og my-entities.jar fil til persistensenheden. Den bruger JTA-datakilden java:app/jdbc/MyDataSource og fortæller Hibernate at bruge den databasespecifikke dialekt til PostgreSQL9.5.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<description>JpaForBeginners</description>
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<jar-file>my-entities.jar</jar-file>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>

		<jta-data-source>java:app/jdbc/MyDataSource</jta-data-source>

		<properties>		
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
		</properties>
	</persistence-unit>
</persistence>

Inkluder alle administrerede klasser, definer en databaseforbindelse og angiv dialekten

Denne konfiguration for Hibernate tilføjer alle administrerede persistensklasser fra roden til persistensenheden og bruger et sæt egenskaber til at oprette forbindelse til en PostgreSQL-database på localhost. Den fortæller også Hibernate at bruge den databasespecifikke dialekt til PostgreSQL9.5.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<description>JpaForBeginners</description>
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>

		<properties>
			<! – database connection – >
			<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver" />
			<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/jpaForBeginners" />
			<property name="jakarta.persistence.jdbc.user" value="postgres" />
			<property name="jakarta.persistence.jdbc.password" value="postgres" />
				
			<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
		</properties>
	</persistence-unit>
</persistence>

Konfigurationer til EclipseLink

Medtag alle administrerede klasser fra ekstern jar-fil, referer til en datakilde og aktiver logning

Den følgende konfiguration for EclipseLink tilføjer alle administrerede persistensklasser fra roden og my-entities.jar fil til persistensenheden. Den bruger JTA-datakilden java:app/jdbc/MyDataSource og logger alle udførte SQL-sætninger med bind-parameterværdierne.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<description>JpaForBeginners</description>
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<jar-file>my-entities.jar</jar-file>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>

		<jta-data-source>java:app/jdbc/MyDataSource</jta-data-source>

		<properties>		
			<! – configure logging – >
			<property name="eclipselink.logging.level" value="INFO"/>
			<property name="eclipselink.logging.level.sql" value="FINE"/>
			<property name="eclipselink.logging.parameters" value="true"/>
		</properties>
	</persistence-unit>
</persistence>

Inkluder alle administrerede klasser, definer en databaseforbindelse og aktiver logning

Denne konfiguration for EclipseLink tilføjer alle administrerede persistensklasser fra roden til persistensenheden og bruger et sæt egenskaber til at oprette forbindelse til en PostgreSQL-database på localhost. Det logger også alle udførte SQL-sætninger med bind-parameterværdierne.

<persistence>
	<! – Define persistence unit – >
	<persistence-unit name="my-persistence-unit">
		<description>JpaForBeginners</description>
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>

		<properties>
			<! – database connection – >
			<property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver" />
			<property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/jpaForBeginners" />
			<property name="jakarta.persistence.jdbc.user" value="postgres" />
			<property name="jakarta.persistence.jdbc.password" value="postgres" />
				
			<! – configure logging – >
			<property name="eclipselink.logging.level" value="INFO"/>
			<property name="eclipselink.logging.level.sql" value="FINE"/>
			<property name="eclipselink.logging.parameters" value="true"/>
		</properties>
	</persistence-unit>
</persistence>

Oversigt

Som du har set i denne artikel, gør JPA'S persistence.xml dig i stand til at konfigurere de vigtigste dele af dit persistenslag. Du kan definere, hvilke administrerede persistensklasser du vil inkludere, hvilken database din persistensudbyder skal forbinde til, om og hvordan cachen på 2. niveau skal bruges og meget mere.

Jeg ved fra min egen erfaring, at det er svært at huske alle de konfigurationsdetaljer, som jeg viste dig i denne artikel. Jeg anbefaler derfor, at du bogmærker det, eller at du downloader snydearket fra Thoughts on Java Library. Hvis du ikke allerede er medlem, kan du deltage her gratis.


Java tag