HHH-4933 Work on HEM doc, refreshing it for JPA 2. architecture and configuration refreshed
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18923 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
0065a221a3
commit
5b595bcf26
|
@ -51,7 +51,7 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-core</artifactId>
|
||||
<artifactId>hibernate-annotations</artifactId>
|
||||
<version>${hibernate-core-version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -66,8 +66,8 @@
|
|||
<para>First, set up your classpath (after you have created a new project
|
||||
in your favorite IDE): <itemizedlist>
|
||||
<listitem>
|
||||
<para>Copy all Hibernate3 core and required 3rd party library
|
||||
files.</para>
|
||||
<para>Copy <filename>hibernate-core.jar</filename> and required 3rd
|
||||
party library files.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
|
@ -22,80 +22,129 @@
|
|||
~ 51 Franklin Street, Fifth Floor
|
||||
~ Boston, MA 02110-1301 USA
|
||||
-->
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
|
||||
<!ENTITY version "WORKING">
|
||||
<!ENTITY today "TODAY">
|
||||
]>
|
||||
|
||||
<book>
|
||||
|
||||
<bookinfo>
|
||||
<title>Hibernate EntityManager</title>
|
||||
|
||||
<subtitle>User guide</subtitle>
|
||||
<releaseinfo>&version;</releaseinfo>
|
||||
<edition>1.0</edition>
|
||||
<pubsnumber>1</pubsnumber>
|
||||
<pubdate>&today;</pubdate>
|
||||
<productnumber>&version;</productnumber>
|
||||
<issuenum>1</issuenum>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/hibernate_logo_a.png" format="PNG"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
<copyright>
|
||||
<year>2005</year>
|
||||
<holder>Red Hat Inc.</holder>
|
||||
</copyright>
|
||||
|
||||
<releaseinfo>&version;</releaseinfo>
|
||||
|
||||
<edition>1.0</edition>
|
||||
|
||||
<pubsnumber>1</pubsnumber>
|
||||
|
||||
<pubdate>&today;</pubdate>
|
||||
|
||||
<productnumber>&version;</productnumber>
|
||||
|
||||
<issuenum>1</issuenum>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/hibernate_logo_a.png" format="PNG" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<copyright>
|
||||
<year>2005</year>
|
||||
|
||||
<holder>Red Hat Inc. and the various authors</holder>
|
||||
</copyright>
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Emmanuel</firstname>
|
||||
|
||||
<surname>Bernard</surname>
|
||||
</author>
|
||||
|
||||
<author>
|
||||
<firstname>Steve</firstname>
|
||||
|
||||
<surname>Ebersole</surname>
|
||||
</author>
|
||||
|
||||
<!--TODO add translators like core did -->
|
||||
</authorgroup>
|
||||
</bookinfo>
|
||||
|
||||
<toc/>
|
||||
<toc></toc>
|
||||
|
||||
<preface>
|
||||
<title>Introducing EJB3 Persistence</title>
|
||||
<para>The EJB3 specification recognizes the interest and the success of
|
||||
the transparent object/relational mapping paradigm. The EJB3 specification
|
||||
standardizes the basic APIs and the metadata needed for any
|
||||
object/relational persistence mechanism.
|
||||
<emphasis>Hibernate EntityManager</emphasis>
|
||||
implements the programming interfaces and
|
||||
lifecycle rules as defined by the EJB3 persistence specification. Together
|
||||
with<emphasis>Hibernate Annotations</emphasis>, this wrapper implements a
|
||||
complete (and standalone) EJB3 persistence solution on top of the mature
|
||||
Hibernate core. You may use a combination of all three together,
|
||||
annotations without EJB3 programming interfaces and lifecycle, or even
|
||||
pure native Hibernate, depending on the business and technical needs of
|
||||
your project. You can at all times fall back to Hibernate native APIs, or
|
||||
if required, even to native JDBC and SQL.
|
||||
</para>
|
||||
<title>Introducing JPA Persistence</title>
|
||||
|
||||
<para>The JPA specification recognizes the interest and the success of the
|
||||
transparent object/relational mapping paradigm. It standardizes the basic
|
||||
APIs and the metadata needed for any object/relational persistence
|
||||
mechanism. <emphasis>Hibernate EntityManager</emphasis> implements the
|
||||
programming interfaces and lifecycle rules as defined by the JPA 2.0
|
||||
specification. Together with <emphasis>Hibernate Annotations</emphasis>,
|
||||
this wrapper implements a complete (and standalone) JPA persistence
|
||||
solution on top of the mature Hibernate Core. You may use a combination of
|
||||
all three together, annotations without JPA programming interfaces and
|
||||
lifecycle, or even pure native Hibernate Core, depending on the business
|
||||
and technical needs of your project. You can at all times fall back to
|
||||
Hibernate native APIs, or if required, even to native JDBC and SQL.</para>
|
||||
</preface>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/architecture.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/configuration.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/entitymanagerapi.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/metamodel.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/transactions.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/listeners.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/batch.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/query_ejbql.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/query_criteria.xml"/>
|
||||
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="modules/query_native.xml"/>
|
||||
|
||||
<xi:include href="modules/architecture.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/configuration.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/entitymanagerapi.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/metamodel.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/transactions.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/listeners.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/batch.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/query_ejbql.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/query_criteria.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<xi:include href="modules/query_native.xml"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude" />
|
||||
|
||||
<bibliography>
|
||||
<title>References</title>
|
||||
|
||||
<biblioentry id="JPA2">
|
||||
<abbrev id="JPA2_ABBREV">JPA 2 Specification</abbrev>
|
||||
<title>JSR 317: <trademark>Java</trademark> Persistence API, Version 2.0 </title>
|
||||
|
||||
<title>JSR 317: <trademark>Java</trademark> Persistence API, Version
|
||||
2.0</title>
|
||||
|
||||
<collab>
|
||||
<collabname>Java Persistence 2.0 Expert Group</collabname>
|
||||
</collab>
|
||||
|
||||
<copyright>
|
||||
<year>2009</year>
|
||||
|
||||
<holder>SUN MICROSYSTEMS, INC.</holder>
|
||||
</copyright>
|
||||
<bibliomisc>
|
||||
<email>jsr-317-feedback@sun.com</email>
|
||||
<ulink url="http://jcp.org/en/jsr/detail?id=317">JSR 317 JCP Page</ulink>
|
||||
</bibliomisc>
|
||||
|
||||
<bibliomisc><email>jsr-317-feedback@sun.com</email> <ulink
|
||||
url="http://jcp.org/en/jsr/detail?id=317">JSR 317 JCP
|
||||
Page</ulink></bibliomisc>
|
||||
</biblioentry>
|
||||
</bibliography>
|
||||
|
||||
</book>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<?xml version='1.0' encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2010, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
@ -22,24 +22,23 @@
|
|||
~ 51 Franklin Street, Fifth Floor
|
||||
~ Boston, MA 02110-1301 USA
|
||||
-->
|
||||
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<chapter id="architecture">
|
||||
<title>Architecture</title>
|
||||
|
||||
<section>
|
||||
<title>Definitions</title>
|
||||
|
||||
<para>EJB3 is part of the Java EE 5.0 platform. Persistence in EJB3 is
|
||||
available in EJB3 containers, as well as for standalone J2SE applications
|
||||
<para>JPA 2 is part of the Java EE 6.0 platform. Persistence in JPA is
|
||||
available in containers like EJB 3 or the more modern CDI (Java Context
|
||||
and Dependency Injection), as well as in standalone Java SE applications
|
||||
that execute outside of a particular container. The following programming
|
||||
interfaces and artifacts are available in both environments.</para>
|
||||
|
||||
<variablelist spacing="compact">
|
||||
<varlistentry>
|
||||
<term>
|
||||
<literal>EntityManagerFactory</literal>
|
||||
</term>
|
||||
<term><literal>EntityManagerFactory</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>An entity manager factory provides entity manager instances,
|
||||
|
@ -52,9 +51,7 @@
|
|||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>
|
||||
<literal>EntityManager</literal>
|
||||
</term>
|
||||
<term><literal>EntityManager</literal></term>
|
||||
|
||||
<listitem>
|
||||
<para>The <literal>EntityManager</literal> API is used to access a
|
||||
|
@ -128,7 +125,7 @@
|
|||
</section>
|
||||
|
||||
<section>
|
||||
<title>EJB container environment</title>
|
||||
<title>In container environment (eg. EJB 3)</title>
|
||||
|
||||
<section>
|
||||
<title>Container-managed entity manager</title>
|
||||
|
@ -170,16 +167,16 @@
|
|||
<para>The most common case is to bind the persistence context scope to
|
||||
the current transaction scope. This is only doable when JTA transactions
|
||||
are used: the persistence context is associated with the JTA transaction
|
||||
life cycle. When a entity manager is invoked, the persistence context is
|
||||
also opened, if there is no persistence context associated with the
|
||||
life cycle. When an entity manager is invoked, the persistence context
|
||||
is also opened, if there is no persistence context associated with the
|
||||
current JTA transaction. Otherwise, the associated persistence context
|
||||
is used. The persistence context ends when the JTA transaction
|
||||
completes. This means that during the JTA transaction, an application
|
||||
will be able to work on managed entities of the same persistence
|
||||
context. In other words, you don't have to pass the entity manager's
|
||||
persistence context across your EJB method calls, but simply use
|
||||
dependency injection or lookup whenever you need an entity
|
||||
manager.</para>
|
||||
persistence context across your managed beans (CDI) or EJBs method
|
||||
calls, but simply use dependency injection or lookup whenever you need
|
||||
an entity manager.</para>
|
||||
|
||||
<para>You can also use an extended persistence context. This can be
|
||||
combined with stateful session beans, if you use a container-managed
|
||||
|
@ -194,16 +191,18 @@
|
|||
view of the application user, and implement it using an extended
|
||||
persistence context. Please refer to the Hibernate reference manual or
|
||||
the book Hibernate In Action for more information about this pattern.
|
||||
JBoss Seam is a framework that link together JSF and EJB3 around the
|
||||
notion of conversation and unit of work. For an application-managed
|
||||
</para>
|
||||
|
||||
<para>JBoss Seam 3 is built on top of CDI and has at it's core concept
|
||||
the notion of conversation and unit of work. For an application-managed
|
||||
entity manager the persistence context is created when the entity
|
||||
manager is created and kept until the entity manager is closed. In an
|
||||
extended persistence context, all modification operations (persist,
|
||||
merge, remove) executed outside a transaction are queued until the
|
||||
persistence context is attached to a transaction. The transaction
|
||||
typically occurs at the user process end, allowing the whole process to
|
||||
be commited or rollbacked. For application-managed entity manager only
|
||||
support the exctended persistence context.</para>
|
||||
be committed or rollbacked. For application-managed entity manager only
|
||||
support the extended persistence context.</para>
|
||||
|
||||
<para>A resource-local entity manager or an entity manager created with
|
||||
<literal>EntityManagerFactory.createEntityManager()</literal>
|
||||
|
@ -235,7 +234,8 @@
|
|||
<para>If a stateless session bean, message-driven bean, or stateful
|
||||
session bean with a transaction-scoped persistence context calls a
|
||||
stateful session bean with an extended persistence context in the
|
||||
same JTA transaction, an IllegalStateException is thrown.</para>
|
||||
same JTA transaction, an
|
||||
<classname>IllegalStateException</classname> is thrown.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
|
@ -265,7 +265,7 @@
|
|||
<para>If a stateful session bean with an extended persistence
|
||||
context calls a stateful session bean with a different extended
|
||||
persistence context in the same transaction, an
|
||||
IllegalStateException is thrown.</para>
|
||||
<classname>IllegalStateException</classname> is thrown.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
@ -274,7 +274,7 @@
|
|||
<section id="architecture-javase" revision="1">
|
||||
<title>Java SE environments</title>
|
||||
|
||||
<para>In a Java SE environment only extented context application-managed
|
||||
<para>In a Java SE environment only extended context application-managed
|
||||
entity managers are available. You can retrieve an entity manger using the
|
||||
<literal>EntityManagerFactory</literal> API. Only resource-local entity
|
||||
managers are available. In other words, JTA transactions and persistence
|
||||
|
@ -288,4 +288,4 @@
|
|||
closed when the entity manager is closed. Many resource-local transaction
|
||||
share the same persistence context, in this case.</para>
|
||||
</section>
|
||||
</chapter>
|
||||
</chapter>
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<?xml version='1.0' encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
@ -22,22 +22,64 @@
|
|||
~ 51 Franklin Street, Fifth Floor
|
||||
~ Boston, MA 02110-1301 USA
|
||||
-->
|
||||
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
|
||||
<chapter id="configuration">
|
||||
<title id="setup">Setup and configuration</title>
|
||||
|
||||
<section>
|
||||
<title>Setup</title>
|
||||
|
||||
<para>The EJB 3.0 / JPA compatible Hibernate EntityManager is built on top
|
||||
of Hibernate core and Hibernate Annotations. You have to use compatible
|
||||
versions of each module. Please consult the compatibility matrix in the
|
||||
hibernate.org download section. The following libraries have to be in your
|
||||
classpath: hibernate3.jar, hibernate-annotations.jar,
|
||||
<para>The JPA 2.0 compatible Hibernate EntityManager is built on top of
|
||||
the core of Hibernate and Hibernate Annotations. Starting from version
|
||||
3.5, we have bundled in a single Hibernate distribution all the necessary
|
||||
modules:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Hibernate Core: the native Hibernate APIs and core engine</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Hibernate Annotations: the annotation-based mapping</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Hibernate EntityManager: the JPA 2.0 APIs and livecycle semantic
|
||||
implementation</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>The following libraries have to be in your classpath:
|
||||
hibernate-core.jar, hibernate-annotations.jar,
|
||||
hibernate-commons-annotations.jar, hibernate-entitymanager.jar and all
|
||||
needed third party libraries for each package (incl.
|
||||
ejb-persistence.jar).</para>
|
||||
hibernate-jpa-2.0-api.jar).</para>
|
||||
|
||||
<note>
|
||||
<title>What is hibernate-jpa-2.0-api-x.y.z.jar</title>
|
||||
|
||||
<para>This is the JAR containing the JPA 2.0 API, it is fully compliant
|
||||
with the spec and passed the TCK signature test. You typically don't
|
||||
need it when you deploy your application in a Java EE 6 application
|
||||
server (like JBoss AS 6 for example).</para>
|
||||
</note>
|
||||
|
||||
<para>If you use Maven, add the following dependencies</para>
|
||||
|
||||
<programlisting><project ...>
|
||||
...
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.hibernate</groupId>
|
||||
<artifactId>hibernate-entitymanager</artifactId>
|
||||
<version>${hibernate-core-version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project></programlisting>
|
||||
|
||||
<para>All the required dependencies like hibernate-core and
|
||||
hibernate-annotations will be dragged transitively.</para>
|
||||
</section>
|
||||
|
||||
<section id="setup-configuration"
|
||||
|
@ -52,16 +94,16 @@
|
|||
A persistence archive is a JAR file which must define a
|
||||
<literal>persistence.xml</literal> file that resides in the
|
||||
<filename>META-INF</filename> folder. All properly annotated classes
|
||||
included in the archive (ie having an <literal>@Entity</literal>
|
||||
included in the archive (ie. having an <literal>@Entity</literal>
|
||||
annotation), all annotated packages and all Hibernate hbm.xml files
|
||||
included in the archive will be added to the persistence unit
|
||||
configuration, so by default, your persistence.xml will be quite
|
||||
minimalist:</para>
|
||||
|
||||
<programlisting><persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
|
||||
version="1.0">
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||
version="2.0">
|
||||
<persistence-unit name="sample">
|
||||
<jta-data-source>java:/DefaultDS</jta-data-source>
|
||||
<properties>
|
||||
|
@ -75,9 +117,9 @@
|
|||
<filename><literal>persistence.xml</literal></filename> file</para>
|
||||
|
||||
<programlisting><persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
|
||||
version="1.0">
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||
version="2.0">
|
||||
<persistence-unit name="manager1" transaction-type="JTA">
|
||||
<provider>org.hibernate.ejb.HibernatePersistence</provider>
|
||||
<jta-data-source>java:/DefaultDS</jta-data-source>
|
||||
|
@ -86,6 +128,8 @@
|
|||
<class>org.acme.Employee</class>
|
||||
<class>org.acme.Person</class>
|
||||
<class>org.acme.Address</class>
|
||||
<shared-cache-mode>ENABLE_SELECTOVE</shared-cache-mode>
|
||||
<validation-mode>CALLBACK</validation-mode>
|
||||
<properties>
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
|
||||
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
|
||||
|
@ -198,6 +242,100 @@
|
|||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>shared-cache-mode</term>
|
||||
|
||||
<listitem>
|
||||
<para>By default, entities are elected for second-level cache if
|
||||
annotated with <classname>@Cacheable</classname>. You can
|
||||
however:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>ALL</literal>: force caching for all
|
||||
entities</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>NONE</literal>: disable caching for all
|
||||
entities (useful to take second-level cache out of the
|
||||
equation)</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>ENABLE_SELECTIVE</literal> (default): enable
|
||||
caching when explicitly marked</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>DISABLE_SELECTIVE</literal>: enable caching
|
||||
unless explicitly marked as
|
||||
<classname>@Cacheable(false)</classname> (not
|
||||
recommended)</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para> See Hibernate Annotation's documentation for more
|
||||
details.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>validation-mode</term>
|
||||
|
||||
<listitem>
|
||||
<para>By default, Bean Validation (and Hibernate Validator) is
|
||||
activated. When an entity is created, updated (and optionally
|
||||
deleted), it is validated before being sent to the database. The
|
||||
database schema generated by Hibernate also reflects the
|
||||
constraints declared on the entity.</para>
|
||||
|
||||
<para>You can fine-tune that if needed:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>AUTO</literal>: if Bean Validation is present
|
||||
in the classpath, CALLBACK and DDL are activated.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>CALLBACK</literal>: entities are validated on
|
||||
creation, update and deletion. If no Bean Validation provider
|
||||
is present, an exception is raised at initialization
|
||||
time.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>DDL</literal>: (not standard, see below)
|
||||
database schemas are entities are validated on creation,
|
||||
update and deletion. If no Bean Validation provider is
|
||||
present, an exception is raised at initialization time.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>NONE</literal>: Bean Validation is not used at
|
||||
all</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>Unfortunately, <literal>DDL</literal> is not standard mode
|
||||
(though extremely useful) and you will not be able to put it in
|
||||
<literal><validation-mode></literal>. To use it, add a
|
||||
regular property</para>
|
||||
|
||||
<programlisting><property name="javax.persistence.validation.mode">
|
||||
ddl
|
||||
</property></programlisting>
|
||||
|
||||
<para>With this approach, you can mix ddl and callback
|
||||
modes:</para>
|
||||
|
||||
<programlisting><property name="javax.persistence.validation.mode">
|
||||
ddl, callback
|
||||
</property></programlisting>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><code>properties</code></term>
|
||||
|
||||
|
@ -206,62 +344,164 @@
|
|||
properties. This is where you will define your Hibernate specific
|
||||
configurations. This is also where you will have to specify JDBC
|
||||
connection information as well.</para>
|
||||
|
||||
<para>Here is a list of JPA 2 standard properties. Be sure to also
|
||||
Hibernate Core's documentation to see Hibernate specific
|
||||
properties.</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.lock.timeout</literal>
|
||||
pessimistic lock timeout in milliseconds
|
||||
(<classname>Integer</classname> or
|
||||
<classname>String</classname>), this is a hint used by
|
||||
Hibernate but requires support by your underlying
|
||||
database.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.query.timeout</literal> query
|
||||
timeout in milliseconds (<classname>Integer</classname> or
|
||||
<classname>String</classname>), this is a hint used by
|
||||
Hibernate but requires support by your underlying database
|
||||
(TODO is that 100% true or do we use some other
|
||||
tricks).</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.validation.mode</literal>
|
||||
corresponds to the <literal>validation-mode</literal> element.
|
||||
Use it if you wish to use the non standard
|
||||
<literal>DDL</literal> value.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>javax.persistence.validation.group.pre-persist defines
|
||||
the group or list of groups to validate before persisting an
|
||||
entity. This is a comma separated fully qualified class name
|
||||
string (eg <code>com.acme.groups.Common</code> or
|
||||
<code>com.acme.groups.Common,
|
||||
javax.validation.groups.Default</code>)</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<note>
|
||||
<para>To know more about Bean Validation and Hibernate
|
||||
Validator, check out Hibernate Validator's reference
|
||||
documentation as well as Hibernate Annotations's documentation
|
||||
on Bean Validation.</para>
|
||||
</note>
|
||||
|
||||
<para>The following properties can only be used in a SE
|
||||
environment where no datasource/JNDI is available:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.jdbc.driver</literal>: the
|
||||
fully qualified class name of the driver class</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.jdbc.url</literal>: the
|
||||
driver specific URL</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.jdbc.user</literal> the user
|
||||
name used for the database connection</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.jdbc.password</literal> the
|
||||
password used for the database connection</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>Be sure to define the grammar definition in the
|
||||
<literal>persistence</literal> element since the EJB3 specification
|
||||
requires the schema validation. If the systemId ends with
|
||||
<literal>persistence_1_0.xsd</literal>, Hibernate entityManager will use
|
||||
the version embedded in the hibernate-entitymanager.jar. No internet
|
||||
access will be processed.</para>
|
||||
<literal>persistence</literal> element since the JPA specification
|
||||
requires schema validation. If the <literal>systemId</literal> ends with
|
||||
<literal>persistence_2_0.xsd</literal>, Hibernate entityManager will use
|
||||
the version embedded in the hibernate-entitymanager.jar. It won't fetch
|
||||
the resource from the internet.</para>
|
||||
|
||||
<programlisting><persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
|
||||
version="1.0"></programlisting>
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
|
||||
version="2.0"></programlisting>
|
||||
</section>
|
||||
|
||||
<section id="setup-configuration-bootstrapping" revision="1">
|
||||
<title>Bootstrapping</title>
|
||||
|
||||
<para>The EJB3 specification defines a bootstrap procedure to access the
|
||||
<para>The JPA specification defines a bootstrap procedure to access the
|
||||
<classname>EntityManagerFactory</classname> and the
|
||||
<classname>EntityManager</classname>. The bootstrap class is
|
||||
<classname>javax.persistence.Persistence</classname>, e.g.</para>
|
||||
|
||||
<programlisting>EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
|
||||
|
||||
//or
|
||||
Map configOverrides = new HashMap();
|
||||
|
||||
Map<String, Object> configOverrides = new HashMap<String, Object>();
|
||||
configOverrides.put("hibernate.hbm2ddl.auto", "create-drop");
|
||||
EntityManagerFactory programmaticEmf =
|
||||
Persistence.createEntityManagerFactory("manager1", configOverrides);</programlisting>
|
||||
|
||||
<para>The first version is equivalent to the second with an empty map.
|
||||
The map version is a set of overrides that will take precedence over any
|
||||
properties defined in your persistence.xml files. There are a couple of
|
||||
EJB3 properties usable in the map:</para>
|
||||
properties defined in your <filename>persistence.xml</filename> files.
|
||||
All the properties defined in <xref
|
||||
linkend="setup-configuration-packaging" /> can be passed to the
|
||||
<methodname>createEntityManagerFactory</methodname> method and there are
|
||||
a few additional ones:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>javax.persistence.provider to define the provider class
|
||||
used</para>
|
||||
<para><literal>javax.persistence.provider</literal> to define the
|
||||
provider class used</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>javax.persistence.transactionType to define the transaction
|
||||
type used (either JTA or RESOURCE_LOCAL)</para>
|
||||
<para><literal>javax.persistence.transactionType</literal> to define
|
||||
the transaction type used (either <literal>JTA</literal> or
|
||||
<literal>RESOURCE_LOCAL</literal>)</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>javax.persistence.jtaDataSource to define the JTA datasource
|
||||
name in JNDI</para>
|
||||
<para><literal>javax.persistence.jtaDataSource</literal> to define
|
||||
the JTA datasource name in JNDI</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>javax.persistence.nonJtaDataSource to define the non JTA
|
||||
datasource name in JNDI</para>
|
||||
<para><literal>javax.persistence.nonJtaDataSource</literal> to
|
||||
define the non JTA datasource name in JNDI</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.lock.timeout</literal> pessimistic
|
||||
lock timeout in milliseconds (<classname>Integer</classname> or
|
||||
<classname>String</classname>)</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.query.timeout</literal> query
|
||||
timeout in milliseconds (<classname>Integer</classname> or
|
||||
<classname>String</classname>)</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.sharedCache.mode</literal>
|
||||
corresponds to the <literal>share-cache-mode</literal> element
|
||||
defined in <xref linkend="setup-configuration-packaging" />.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>javax.persistence.validation.mode</literal>
|
||||
corresponds to the <literal>validation-mode</literal> element
|
||||
defined in <xref linkend="setup-configuration-packaging" />.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
|
@ -423,7 +663,7 @@ EntityManagerFactory programmaticEmf =
|
|||
though.</para>
|
||||
</note>
|
||||
|
||||
<para>Here is a typical configuration in a J2SE environment</para>
|
||||
<para>Here is a typical configuration in a Java SE environment</para>
|
||||
|
||||
<programlisting><persistence>
|
||||
<persistence-unit name="manager1" transaction-type="RESOURCE_LOCAL">
|
||||
|
@ -431,11 +671,11 @@ EntityManagerFactory programmaticEmf =
|
|||
<class>org.hibernate.ejb.test.Distributor</class>
|
||||
<class>org.hibernate.ejb.test.Item</class>
|
||||
<properties>
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
|
||||
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
|
||||
<property name="hibernate.connection.username" value="sa"/>
|
||||
<property name="hibernate.connection.password" value=""/>
|
||||
<property name="hibernate.connection.url" value="jdbc:hsqldb:."/>
|
||||
<property name="<literal>javax.persistence.jdbc.driver</literal>" value="org.hsqldb.jdbcDriver"/>
|
||||
<property name="<literal>javax.persistence.jdbc.user</literal>" value="sa"/>
|
||||
<property name="<literal>javax.persistence.jdbc.password</literal>" value=""/>
|
||||
<property name="<literal>javax.persistence.jdbc.url</literal>" value="jdbc:hsqldb:."/>
|
||||
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/
|
||||
<property name="hibernate.max_fetch_depth" value="3"/>
|
||||
|
||||
<!-- cache configuration -->
|
||||
|
@ -603,8 +843,8 @@ EntityManagerFactory emf =
|
|||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>Note that the JACC*EventListeners are removed if the security is not
|
||||
enabled.</para>
|
||||
<para>Note that the <classname>JACC*EventListeners</classname> are removed
|
||||
if the security is not enabled.</para>
|
||||
|
||||
<para>You can configure the event listeners either through the properties
|
||||
(see <xref linkend="setup-configuration" />) or through the
|
||||
|
@ -636,12 +876,13 @@ emf.close(); //close at application end</programlisting>
|
|||
manager factory is a wrapper on top of a session factory. Calls to the
|
||||
entityManagerFactory are thread safe.</para>
|
||||
|
||||
<para>Thanks to the EntityManagerFactory, you can retrieve an extended
|
||||
entity manager. The extended entity manager keep the same persistence
|
||||
context for the lifetime of the entity manager: in other words, the
|
||||
entities are still managed between two transactions (unless you call
|
||||
entityManager.clear() in between). You can see an entity manager as a
|
||||
small wrapper on top of an Hibernate session.</para>
|
||||
<para>Thanks to the <classname>EntityManagerFactory</classname>, you can
|
||||
retrieve an extended entity manager. The extended entity manager keep the
|
||||
same persistence context for the lifetime of the entity manager: in other
|
||||
words, the entities are still managed between two transactions (unless you
|
||||
call <methodname>entityManager.clear()</methodname> in between). You can
|
||||
see an entity manager as a small wrapper on top of an Hibernate
|
||||
session.</para>
|
||||
|
||||
<para>TODO explains emf.createEntityManager(Map)</para>
|
||||
</section>
|
||||
|
@ -655,4 +896,4 @@ emf.close(); //close at application end</programlisting>
|
|||
be no performance cost. For more information on Hibernate Validator,
|
||||
please refer to the Hibernate Annotations reference guide.</para>
|
||||
</section>
|
||||
</chapter>
|
||||
</chapter>
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
<!--
|
||||
~ Hibernate, Relational Persistence for Idiomatic Java
|
||||
~
|
||||
~ Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
|
||||
~ Copyright (c) 2008, Red Hat Inc or third-party contributors as
|
||||
~ indicated by the @author tags or express copyright attribution
|
||||
~ statements applied by the authors. All third-party contributions are
|
||||
~ distributed under license by Red Hat Middleware LLC.
|
||||
~ distributed under license by Red Hat Inc.
|
||||
~
|
||||
~ This copyrighted material is made available to anyone wishing to use, modify,
|
||||
~ copy, or redistribute it subject to the terms and conditions of the GNU
|
||||
|
|
Loading…
Reference in New Issue