diff --git a/documentation/manual/src/main/docbook/en-US/HIBERNATE_-_Relational_Persistence_for_Idiomatic_Java.xml b/documentation/manual/src/main/docbook/en-US/HIBERNATE_-_Relational_Persistence_for_Idiomatic_Java.xml
index c101609a01..7413152e43 100644
--- a/documentation/manual/src/main/docbook/en-US/HIBERNATE_-_Relational_Persistence_for_Idiomatic_Java.xml
+++ b/documentation/manual/src/main/docbook/en-US/HIBERNATE_-_Relational_Persistence_for_Idiomatic_Java.xml
@@ -95,6 +95,8 @@
+
+
diff --git a/documentation/manual/src/main/docbook/en-US/author_group.xml b/documentation/manual/src/main/docbook/en-US/author_group.xml
index 52b9bd0118..88f76ccaef 100644
--- a/documentation/manual/src/main/docbook/en-US/author_group.xml
+++ b/documentation/manual/src/main/docbook/en-US/author_group.xml
@@ -46,6 +46,10 @@
Steve
Ebersole
+
+ Hardy
+ Ferentschik
+
James
diff --git a/documentation/manual/src/main/docbook/en-US/content/additionalmodules.xml b/documentation/manual/src/main/docbook/en-US/content/additionalmodules.xml
new file mode 100644
index 0000000000..994630dad9
--- /dev/null
+++ b/documentation/manual/src/main/docbook/en-US/content/additionalmodules.xml
@@ -0,0 +1,292 @@
+
+
+
+
+ Additional modules
+
+ Hibernate Core also offers integration with some external
+ modules/projects. This includes Hibernate Validator the reference
+ implementation of Bean Validation (JSR 303) and Hibernate Search.
+
+
+ Bean Validation
+
+ Bean Validation standardizes how to define and declare domain model
+ level constraints. You can, for example, express that a property should
+ never be null, that the account balance should be strictly positive, etc.
+ These domain model constraints are declared in the bean itself by
+ annotating its properties. Bean Validation can then read them and check
+ for constraint violations. The validation mechanism can be executed in
+ different layers in your application without having to duplicate any of
+ these rules (presentation layer, data access layer). Following the DRY
+ principle, Bean Validation and its reference implementation Hibernate
+ Validator has been designed for that purpose.
+
+ The integration between Hibernate and Bean Validation works at two
+ levels. First, it is able to check in-memory instances of a class for
+ constraint violations. Second, it can apply the constraints to the
+ Hibernate metamodel and incorporate them into the generated database
+ schema.
+
+ Each constraint annotation is associated to a validator
+ implementation responsible for checking the constraint on the entity
+ instance. A validator can also (optionally) apply the constraint to the
+ Hibernate metamodel, allowing Hibernate to generate DDL that expresses the
+ constraint. With the appropriate event listener, you can execute the
+ checking operation on inserts, updates and deletes done by
+ Hibernate.
+
+ When checking instances at runtime, Hibernate Validator returns
+ information about constraint violations in a set of
+ ConstraintViolations. Among other information, the
+ ConstraintViolation contains an error description
+ message that can embed the parameter values bundle with the annotation
+ (eg. size limit), and message strings that may be externalized to a
+ ResourceBundle.
+
+
+ Adding Bean Validation
+
+ To enable Hibernate's Bean Validation integration, simply add a
+ Bean Validation provider (preferably Hibernate Validation 4) on your
+ classpath.
+
+
+
+ Configuration
+
+ By default, no configuration is necessary.
+
+ The Default group is validated on entity
+ insert and update and the database model is updated accordingly based on
+ the Default group as well.
+
+ You can customize the Bean Validation integration by setting the
+ validation mode. Use the
+ javax.persistence.validation.mode property and set it
+ up for example in your persistence.xml file or your
+ hibernate.cfg.xml file. Several options are
+ possible:
+
+
+
+ auto (default): enable integration between
+ Bean Validation and Hibernate (callback and ddl generation) only if
+ Bean Validation is present in the classpath.
+
+
+
+ none: disable all integration between Bean
+ Validation and Hibernate
+
+
+
+ callback: only validate entities when they
+ are either inserted, updated or deleted. An exception is raised if
+ no Bean Validation provider is present in the classpath.
+
+
+
+ ddl: only apply constraints to the database
+ schema when generated by Hibernate. An exception is raised if no
+ Bean Validation provider is present in the classpath. This value is
+ not defined by the Java Persistence spec and is specific to
+ Hibernate.
+
+
+
+
+ You can use both callback and
+ ddl together by setting the property to
+ callback, dll
+
+ <persistence ...>
+ <persistence-unit ...>
+ ...
+ <properties>
+ <property name="javax.persistence.validation.mode"
+ value="callback, ddl"/>
+ </properties>
+ </persistence-unit>
+</persistence>
+
+ This is equivalent to auto except that if no
+ Bean Validation provider is present, an exception is raised.
+
+
+ If you want to validate different groups during insertion, update
+ and deletion, use:
+
+
+
+ javax.persistence.validation.group.pre-persist:
+ groups validated when an entity is about to be persisted (default to
+ Default)
+
+
+
+ javax.persistence.validation.group.pre-update:
+ groups validated when an entity is about to be updated (default to
+ Default)
+
+
+
+ javax.persistence.validation.group.pre-remove:
+ groups validated when an entity is about to be deleted (default to
+ no group)
+
+
+
+ org.hibernate.validator.group.ddl: groups
+ considered when applying constraints on the database schema (default
+ to Default)
+
+
+
+ Each property accepts the fully qualified class names of the
+ groups validated separated by a comma (,)
+
+
+ Using custom groups for validation
+
+ <persistence ...>
+ <persistence-unit ...>
+ ...
+ <properties>
+ <property name="javax.persistence.validation.group.pre-update"
+ value="javax.validation.group.Default, com.acme.group.Strict"/>
+ <property name="javax.persistence.validation.group.pre-remove"
+ value="com.acme.group.OnDelete"/>
+ <property name="org.hibernate.validator.group.ddl"
+ value="com.acme.group.DDL"/>
+ </properties>
+ </persistence-unit>
+</persistence>
+
+
+
+ You can set these properties in
+ hibernate.cfg.xml,
+ hibernate.properties or programmatically.
+
+
+
+
+ Catching violations
+
+ If an entity is found to be invalid, the list of constraint
+ violations is propagated by the
+ ConstraintViolationException which exposes the
+ set of ConstraintViolations.
+
+ This exception is wrapped in a
+ RollbackException when the violation happens at
+ commit time. Otherwise the
+ ConstraintViolationException is returned (for
+ example when calling flush(). Note that
+ generally, catchable violations are validated at a higher level (for
+ example in Seam / JSF 2 via the JSF - Bean Validation integration or in
+ your business layer by explicitly calling Bean Validation).
+
+ An application code will rarely be looking for a
+ ConstraintViolationException raised by Hibernate.
+ This exception should be treated as fatal and the persistence context
+ should be discarded (EntityManager or
+ Session).
+
+
+
+ Database schema
+
+ Hibernate uses Bean Validation constraints to generate an accurate
+ database schema:
+
+
+
+ @NotNull leads to a not null column
+ (unless it conflicts with components or table inheritance)
+
+
+
+ @Size.max leads to a
+ varchar(max) definition for Strings
+
+
+
+ @Min, @Max lead
+ to column checks (like value <= max
)
+
+
+
+ @Digits leads to the definition of
+ precision and scale (ever wondered which is which? It's easy now
+ with @Digits :) )
+
+
+
+ These constraints can be declared directly on the entity
+ properties or indirectly by using constraint composition.
+
+ For more information check the Hibernate Validator reference
+ documentation.
+
+
+
+
+ Hibernate Search
+
+
+ Description
+
+ Full text search engines like Apache
+ Lucene are a very powerful technology to bring free
+ text/efficient queries to applications. If suffers several mismatches
+ when dealing with a object domain model (keeping the index up to date,
+ mismatch between the index structure and the domain model, querying
+ mismatch...) Hibernate Search indexes your domain model thanks to a few
+ annotations, takes care of the database / index synchronization and
+ brings you back regular managed objects from free text queries.
+ Hibernate Search is using Apache
+ Lucene under the cover.
+
+
+
+ Integration with Hibernate Annotations
+
+ Hibernate Search integrates with Hibernate Core transparently
+ provided that the Hibernate Search jar is present on the classpath. If
+ you do not wish to automatically register Hibernate Search event
+ listeners, you can set
+ hibernate.search.autoregister_listeners to false.
+ Such a need is very uncommon and not recommended.
+
+ Check the Hibernate Search reference
+ documentation for more information.
+
+
+