<?xml version='1.0' encoding='utf-8' ?>

<!--
  ~ Hibernate, Relational Persistence for Idiomatic Java
  ~
  ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
  ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
  -->
<preface xmlns="http://docbook.org/ns/docbook" xmlns:xl="http://www.w3.org/1999/xlink" >

    <title>Preface</title>
    <para>
        Working with both Object-Oriented software and Relational Databases can be cumbersome and time consuming.
        Development costs are significantly higher due to a paradigm mismatch between how data is represented in
        objects versus relational databases.  Hibernate is an Object/Relational Mapping solution for Java environments.
        The term Object/Relational Mapping refers to the technique of mapping data from an object model representation
        to a relational data model representation (and visa versa).  See
        <link xl:href="http://en.wikipedia.org/wiki/Object-relational_mapping"/> for a good high-level discussion.
    </para>

    <note>
        <para>
            While having a strong background in SQL is not required to use Hibernate, having a basic understanding of
            the concepts can greatly help you understand Hibernate more fully and quickly.  Probably the single
            best background is an understanding of data modeling principles.  You might want to consider these resources
            as a good starting point:
            <itemizedlist>
                <listitem>
                    <para>
                        <link xl:href="http://www.agiledata.org/essays/dataModeling101.html"/>
                    </para>
                </listitem>
                <listitem>
                    <para>
                        <link xl:href="http://en.wikipedia.org/wiki/Data_modeling"/>
                    </para>
                </listitem>
            </itemizedlist>
        </para>
    </note>

    <para>
        Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to
        SQL data types), but also provides data query and retrieval facilities. It can significantly reduce
        development time otherwise spent with manual data handling in SQL and JDBC.  Hibernate’s design goal is to
        relieve the developer from 95% of common data persistence-related programming tasks by eliminating the need for
        manual, hand-crafted data processing using SQL and JDBC.  However, unlike many other persistence solutions,
        Hibernate does not hide the power of SQL from you and guarantees that your investment in relational technology
        and knowledge is as valid as always.
    </para>

    <para>
        Hibernate may not be the best solution for data-centric applications that only use stored-procedures to
        implement the business logic in the database, it is most useful with object-oriented domain models and business
        logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate
        vendor-specific SQL code and will help with the common task of result set translation from a tabular
        representation to a graph of objects.
    </para>

    <section>
        <title>Get Involved</title>
        <itemizedlist>
            <listitem>
                <para>
                    Use Hibernate and report any bugs or issues you find. See
                    <link xl:href="http://hibernate.org/issuetracker.html"/> for details.
                </para>
            </listitem>
            <listitem>
                <para>
                    Try your hand at fixing some bugs or implementing enhancements. Again, see
                    <link xl:href="http://hibernate.org/issuetracker.html"/>.
                </para>
            </listitem>
            <listitem>
                <para>
                    Engage with the community using mailing lists, forums, IRC, or other ways listed at
                    <link xl:href="http://hibernate.org/community.html"/>.
                </para>
            </listitem>
            <listitem>
                <para>
                    Help improve or translate this documentation. Contact us on
                    the developer mailing list if you have interest.
                </para>
            </listitem>
            <listitem>
                <para>
                    Spread the word. Let the rest of your organization know about the benefits of
                    Hibernate.
                </para>
            </listitem>
        </itemizedlist>
    </section>

    <section>
        <title>Getting Started Guide</title>
        <para>
            New users may want to first look through the
            <citetitle pubwork="book">Hibernate Getting Started Guide</citetitle> for basic information as well as
            tutorials.  Even seasoned veterans may want to considering perusing the sections pertaining to
            build artifacts for any changes.
        </para>
    </section>

</preface>

