From jbosstools-commits at lists.jboss.org Thu Jan 29 12:34:03 2009
Content-Type: multipart/mixed; boundary="===============6424831744693035957=="
MIME-Version: 1.0
From: jbosstools-commits at lists.jboss.org
To: jbosstools-commits at lists.jboss.org
Subject: [jbosstools-commits] JBoss Tools SVN: r13338 -
branches/jbosstools-3.0.0.CR2/hibernatetools/docs/reference/en.
Date: Thu, 29 Jan 2009 12:34:03 -0500
Message-ID:
--===============6424831744693035957==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Author: ochikvina
Date: 2009-01-29 12:34:03 -0500 (Thu, 29 Jan 2009)
New Revision: 13338
Added:
branches/jbosstools-3.0.0.CR2/hibernatetools/docs/reference/en/master_ou=
tput.xml
Log:
https://jira.jboss.org/jira/browse/JBDS-571- adding the master_output.xml;
Added: branches/jbosstools-3.0.0.CR2/hibernatetools/docs/reference/en/maste=
r_output.xml
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/jbosstools-3.0.0.CR2/hibernatetools/docs/reference/en/master_o=
utput.xml (rev 0)
+++ branches/jbosstools-3.0.0.CR2/hibernatetools/docs/reference/en/master_o=
utput.xml 2009-01-29 17:34:03 UTC (rev 13338)
@@ -0,0 +1,5170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ =
+
+]>
+
+ Hibernate Tools Reference Guide
+
+ MaxAndersenma=
x.andersen(a)jboss.com
+ OlgaChikvina
+ SvetlanaMukhinasmukhina(a)exadel.com =
+ =
+ April 2008
+
+ 2007
+ 2008
+ JBoss, a division of Red Hat Inc.
+
+
+
+ Version: 3.2.4.CR1
+
+
+
+
+
+ =
+
+
+
+
+
+
+ PDF version
+
+
+
+
+
+ =
+ =
+
+
+ Preface
+
+ Hibernate Tools is a tool=
set for Hibernate 3 =
and related projects. The tools provide Ant
+ tasks and Eclipse plugins for performing reverse engineering, code=
generation, visualization
+ and interaction with Hibernate.
+
+
+ Key Features
+
+ First, we propose to look through the list of key features t=
hat you can benefit from
+ if you start using Hibernate Tools=
.
+
+
+ Key Functionality for Hibernate Tools
+
+ =
+
+
+
+ =
+
+
+ Feature
+ Benefit
+ Chapter
+
+
+
+
+
+
+
+ Code Generation through Ant Task
+
+
+ Allows to execute mapping or Java code g=
eneration from reverse
+ engineering, schema generation and generat=
ion of other artifacts
+ during the build process.
+ =
+ ant task
+
+
+
+
+ Wizards for creation
+ purposes and code
+ generation
+
+
+ A set of wizards are provided with the =
Hibernate Eclipse tools to
+ quickly create common Hibernate files such=
as configuration
+ (cfg.xml) files, mapping files and revenge=
.xml as well. Code
+ Generation wizard helps to generate a seri=
es of various artifacts,
+ there is even support for completely rever=
se engineer an existing
+ database schema.
+ =
+ hibernat=
e mapping file
+ h=
ibernate configuration file
+ code gen=
eration =
+
+
+
+
+
+
+
+ Mapping and Configuration files
+ Editors
+
+
+
+ Support auto-completion and syntax highl=
ighting. Editors also
+ support semantic auto-completion for class=
names and property/field
+ names, making it much more versatile than =
a normal XML
+ editor.
+
+ mappin=
g and configuration files editors
+
+
+
+
+ Tools for organizing and controlling Rev=
erse Engineering
+
+
+ Code Generation wizard provides powerful=
functionality for
+ generating a series of various artifacts l=
ike domain model classes,
+ mapping files, annotated EJB3 entity beans=
, etc. and reveng.xml file
+ editor allows to control this processes.=
para>
+
+ code generation<=
/link> =
+ reveng.xml ed=
itor
+
+
+
+
+ Hibernate Console
+
+
+ It is a new perspective in Eclipse which=
provides an overview of
+ your Hibernate Console configurations, wer=
e you also can get an
+ interactive view of your persistent classe=
s and their relationships.
+ The console allows you to execute HQL quer=
ies against your database
+ and browse the result directly in Eclipse.=
+
+ hibernate con=
sole
+
+
+
+
+ Functional Mapping Diagram
+
+
+ Makes possible to visualize structure of=
entities and
+ relationships between them.
+ =
+ mapping diagr=
am
+
+
+
+
+
+ Eclipse JDT integration
+
+
+ Hibernate Tools integrates into the Java=
code completion and build
+ support of Java in Eclipse. This gives you=
code completion of HQL
+ inside Java code. Additionally, Hibernate =
Tools will add problem
+ markers if your queries are not valid agai=
nst the console
+ configuration associated with the project.=
+
+
+
+
+
+
+
+ =
+
+ Other relevant resources on the topic
+ =
+ Hibernate Tools page on the hibernate.org.
+ All JBoss Developer Studio/JBoss Tools documentation you can=
find here.
+ The latest documentation builds are available here.
+
+
+
+
+ =
+
+ Download and install Hibernate Tools
+
+ Hibernate Tools can be used=
"standalone" via Ant
+ 1.6.x or fully integrated into an Eclipse 3.3.x + WTP 2.x based IDE, s=
uch as JBoss
+ Tools or a default Eclipse 3.3.x + WTP 2.x installation. =
The following describes
+ the install steps in these environments.
+
+
+ JBoss Tools
+
+ JBoss Tools 2.x includes =
Hibernate Tools and
+ thus nothing is required besides downloading and installing JBoss=
Tools. If you need to update to a newer version of the
+ Hibernate Tools just follow=
the instructions in the Eclipse IDE
+ section.
+
+
+
+ Eclipse IDE
+
+ To install into any Eclipse 3.3.x
based Eclipse IDE you can either
+ download the Hibernate Tools =
distribution from the Hibern=
ate website or use the JBoss Tools Update Site
+ (see also http://tools.hib=
ernate.org for links
+ to the update site).
+
+ If you download the Hibernate Tools<=
/property> distribution you need to place
+ the
+ /plugins
+ and
+ /feature
+ directory into your eclipse directory or eclipse extensi=
ons directory. Sometimes
+ Eclipse does not automatically detect new plugins and thus the tools=
will not be activated. To
+ ensure eclipse sees these changes just clean up the cached plugin in=
formation by running eclipse with the
+ -clean option, e=
.g.
+ eclipse
+ -clean. Using the updatesite does not requir=
e any additional steps.
+
+
+ Note:
+ If you need more basic instructions on installing plugins and =
general usage of eclipse
+ then check out https://eclipse-tutorial.dev.java.net/ and especially https://eclipse-tutorial.dev.java.net/visual-tutorials/updatemanager.ht=
ml which
+ covers using the update manager.
+
+
+
+ Usage of Eclipse WTP
+
+ The Hibernate Tools plu=
gins currently use WTP
+ 2.x which at this time is the latest stable release fro=
m the Eclipse Webtools
+ project.
+
+ Because the WTP project not always have had proper versioning =
of their plugins there
+ might exist WTP plugins in your existing eclipse directory from ot=
her Eclipse based projects
+ that are from an earlier WTP release but has either the same versi=
on number or higher. It is
+ thus recommended that if you have issues with WTP provided feature=
s to try and install the
+ plugins on a clean install of eclipse to ensure there are no versi=
on collisions.
+
+
+
+
+
+ Ant
+
+ To use the tools via Ant you need the
+ hibernate-tools.jar
+ and associated libraries. The libraries are included in =
the distribution from the
+ Hibernate website and the Eclipse updatesite. The libraries are loca=
ted in the eclipse plugins
+ directory at
+ /plugins/org.hibernate.eclipse.x.x.x/l=
ib/tools/. These libraries are 100%
+ independent from the eclipse platform. How to use these via ant task=
s are described in the
+ Ant Tools chapter.
+
+
+ =
+ =
+
+ Code generation architecture
+
+ The code generation mechanism in the H=
ibernate Tools consists of a few
+ core concepts. This section explains their overall structure which are=
the same for the Ant and
+ Eclipse tools.
+
+
+ Hibernate Meta Model
+
+ The meta model is the model used by Hibernate Core to perform it=
s object relational
+ mapping. The model includes information about tables, columns, class=
es, properties,
+ components, values, collections etc. The API is in org.hibernate.mapping
+ and its main entry point is the Configura=
tion class, the same class that is
+ used to build a session factory.
+
+ The model represented by the Configur=
ation class can be build in many
+ ways. The following list the currently supported ones in Hibernate Tools.
+
+
+
+
+ A Core configuration uses Hibernate Core and supports read=
ing
+ hbm.xml
+ files, requires a
+ hibernate.cfg.xml
+ . Named core in Eclipse and
+
+ <configuration>
+
+ in ant.
+
+
+
+ An Annotation configuration uses Hibernate Annotations and=
supports
+ hbm.xml
+ and annotated classes, requires a
+ hibernate.cfg.xml
+ . Named annotations in Eclipse and
+
+ <annotationconfiguration>=
+
+ in ant.
+
+
+
+ A JPA configuration uses a Hibernate EntityManager and sup=
ports
+ hbm.xml
+ and annotated classes requires that the project ha=
s a
+ META-INF/persistence.xml
+ in its classpath. Named JPA in Eclipse and
+
+ <jpaconfiguration>
+
+ in ant.
+
+
+
+ A JDBC configuration uses Hibe=
rnate Tools reverse engineering
+ and reads its mappings via JDBC metadata + additional reverse =
engineering files
+ (reveng.xml). Automatically used in Eclipse when doing reverse=
engineering from JDBC and
+ named
+
+ <jdbcconfiguration>
+
+ in ant.
+
+
+
+
+ In most projects you will normally use only one of the Core, Ann=
otation or JPA
+ configuration and possibly the JDBC configuration if you are using t=
he reverse engineering
+ facilities of Hibernate Tools=
.
+
+
+ Note:
+ No matter which Hibernate Configuration type you are using Hibernate
+ Tools supports them.
+
+
+ The following drawing illustrates the core concepts:
+
+
+
+ Hibernate Core Concepts
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The code generation is done based on the Configuration model no =
matter which type of
+ configuration have been used to create the meta model, and thus the =
code generation is
+ independent on the source of the meta model and represented via Expo=
rters.
+
+
+
+ Exporters
+
+ Code generation is done in so called Exporters. An Exporter is handed a
+ Hibernate Meta Model represented as a Con=
figuration instance and it is then
+ the job of the exporter to generate a set of code artifacts.
+
+ The tools provides a default set of Exporter's which can be used=
in both Ant and the
+ Eclipse UI. Documentation for these Exporters is in the Ant Tools
+ and Eclipse Plugins chapters.
+
+ Users can provide their own customer Exporter's, either by custo=
m classes implementing the
+ Exporter interface or simply be providing custom templates. This is =
documented at
+
+
+
+ =
+
+ Eclipse Plugins
+
+ This chapter will introduce you to the functionality that Hibernate
+ Tools provide within Eclipse. That is a =
set of wizards and editors for simplifying
+ the work with Hibernate.
+
+
+ Introduction
+
+ Hibernate Eclipse Tools include wizards for creating Hibernate m=
apping files,
+ configuration files (.cfg.xml), revenge.xml as well as wizards for a=
djusting Console
+ Configuration and Code Generation. Special structured and XML editor=
s, editors for executing
+ HQL and Criteria queries are also provided in Hibernate Console. Ref=
er to Key Features section =
to find all benefits that you
+ can take advantage of while using the tools within Eclipse.
+
+
+ Note:
+ Please note that the=
se tools do not try to hide any functionality of
+ Hibernate. The tools make working with Hibernate
+ easier, but you are still encouraged/required to read the Hibernate Documentation to f=
ully utilize
+ Hibernate Tools and espec=
ially Hibernate it
+ self.
+
+
+
+
+ Creating a Hibernate Mapping File
+
+ Hibernate mapping files are used to specify how your objects are=
related to database
+ tables.
+
+ For creating a skeleton mapping file, i. e. any
+ .hbm.xml
+ , Hibernate Tools provide a basic wizard which you can br=
ing up by navigating
+ New > Hibernate XML mapping file.
+
+
+ Hibernate XML Mapping File Wizard
+
+
+
+
+
+
+
+
+ At first you'll be asked to specify the location and the name fo=
r a new mapping
+ file. On the next dialog you should type or browse the class to map.=
+
+ Specifying the Class to Map
+
+
+
+
+
+
+
+ Pressing finish creates the file and opens it in the structured hbm.xml editor.
+
+ If you start the wizard from the selected class, all values wil=
l be detected there
+ automatically.
+
+
+ Creating Mapping File for Selected Class
+
+
+
+
+
+
+
+
+
+
+
+ Creating a Hibernate Configuration File
+
+ To be able to reverse engineer, prototype queries, and of course=
to simply use
+ Hibernate Core a
+ hibernate.properties
+ or
+ hibernate.cfg.xml
+ file is needed. The Hibernat=
e Tools provide a wizard for
+ generating the
+ hibernate.cfg.xml
+ file if you do not already have such one.
+
+ Start the wizard by clicking
+ New > Other (Ctrl+N)
+ , then
+ Hibernate > Hibernate Configuration=
File (cfg.xml)
+ and press
+ Next
+ . After selecting the wanted location for the
+ hibernate.cfg.xml
+ file, you will see the following page:
+
+
+ Hibernate Configuration File Wizard
+
+
+
+
+
+
+
+
+
+
+
+
+ Note:
+ The contents in the combo boxes for the JDBC driver class and =
JDBC URL change
+ automatically, depending on the Dialect and actual driver you have=
chosen.
+
+
+ Enter your configuration information in this dialog. Details abo=
ut the configuration
+ options can be found in Hibernate
+ Reference Documentation.
+
+ Press
+ Finish
+ to create the configuration file, after optionally creat=
ing a Console
+ configuration, the
+ hibernate.cfg.xml
+ will be automatically opened in an editor. The last opti=
on
+ Create Console Configuration
+ is enabled by default and when enabled, it will automati=
cally use the
+ hibernate.cfg.xml
+ for the basis of a Console configuration.
+
+
+
+ Creating a Hibernate Console Configuration
+
+ A Console configuration describes how the Hibernate plugin should
+ configure Hibernate and what =
configuration files, including which
+ classpath are needed to load the POJO's, JDBC drivers etc. It is req=
uired to make usage of
+ query prototyping, reverse engineering and code generation. You can =
have multiple named
+ console configurations. Normally you would just need one per project=
, but more is definitely
+ possible if your project requires this.
+
+ You create a console configuration by running the Console Configurati=
on
+ Wizard, shown in the following screenshot. The same wizard will also be=
used if
+ you are coming from the
+ hibernate.cfg.xml
+ wizard and had enabled
+ Create Console Configuration
+ .
+
+
+ Note:
+ The wizard will look at the current selection in the IDE and t=
ry and auto-detect the
+ settings which you then can just approve or modify to suit your ne=
eds.
+
+
+
+ The dialog consists of five tabs:
+
+
+
+
+ Main
+ for the basic/required settings
+
+
+
+
+ Creating Hibernate Console Configuration
+
+
+
+
+
+
+
+
+
+
+
+ The following table describes the available settings on the
+ Main
+ tab. The wizard can automatically detect default values =
for most of these if you
+ started the wizard with the relevant java project or resource select=
ed.
+
+
+ Hibernate Console Configuration Parameters
+
+
+
+
+
+
+
+
+
+
+
+ Parameter
+
+
+
+ Description
+
+
+
+ Auto detected value
+
+
+
+
+
+
+
+ Name
+
+
+
+ The unique name of the console configuration
+
+
+
+ Name of the selected project
+
+
+
+
+
+ Type
+
+
+
+ Choose between "Core", "Annotations" and
+ "JPA". Note that the two latter requires running Eclipse I=
DE with
+ a JDK 5 runtime, otherwise you will get classloading and/o=
r version errors.
+
+
+
+ No default value
+
+
+
+
+
+ Project
+
+
+
+ The name of a java project which classpath should be u=
sed in the console
+ configuration
+
+
+
+ Name of the selected project
+
+
+
+
+
+ Database connection
+
+
+
+ DTP provided connection that you can use instead of wh=
at is in cfg.xml and jpa
+ persistence.xml. It's possible to use already configured c=
onnection or
+ specify a new one here.
+
+
+
+ [Hibernate Configured connection]
+
+
+
+
+
+ Property file
+
+
+
+ Path to a hibernate.properties file
+
+
+
+ First hibernate.properties file found in the selected =
project
+
+
+
+
+
+ Configuration file
+
+
+
+ Path to a hibernate.cfg.xml file
+
+
+
+ First hibernate.cfg.xml file found in the selected pro=
ject
+
+
+
+
+
+ Persistence unit
+
+
+
+ Name of the persistence unit to use
+
+
+
+ No default v=
alue (lets Hibernate Entity Manager find the persistence
+ unit)
+
+
+
+
+
+
+
+
+ Tip:
+
+ The two latter settings are normally not required if you speci=
fy a project and it has
+
+ /hibernate.cfg.xml
+
+ or
+
+ /META-INF/persistence.xml
+
+ in its project classpath.
+
+
+
+
+
+
+
+ Options
+ for the additional/optional settings
+
+
+
+
+ Options Tab of the Console Configuration Wizard
+
+
+
+
+
+
+
+
+ The next table describes Hibernate Console Configuration options=
available on the
+ Options
+ tab.
+
+
+ Hibernate Console Configuration Options
+
+
+
+
+
+
+
+
+
+
+
+ Parameter
+
+
+
+ Description
+
+
+
+ Auto detected value
+
+
+
+
+
+
+
+ Naming strategy
+
+
+
+ Fully qualified classname of a custom NamingStrategy. =
Only required if you use a
+ special naming strategy.
+
+
+
+ No default value
+
+
+
+
+
+ Entity resolver
+
+
+
+ Fully qualified classname of a custom EntityResolver. =
Only required if you have
+ special xml entity includes in your mapping files.
+
+
+
+ No default value
+
+
+
+
+
+
+
+
+
+
+ Classpath
+ for classpath
+
+
+
+
+ Specifying Classpath in Hibernate Console Configuration
+
+
+
+
+
+
+
+
+
+
+
+
+ The following table specifies the parameters of the Classpath ta=
b of the wizard.
+
+
+ Hibernate Console Configuration Classpath
+
+
+
+
+
+
+
+
+
+
+
+ Parameter
+
+
+
+ Description
+
+
+
+ Auto detected value
+
+
+
+
+
+
+
+ Classpath
+
+
+
+ The classpat=
h for loading POJO and JDBC drivers; only needed if the default
+ classpath of the Project does not contain the required cla=
sses. Do not add Hibernate
+ core libraries or dependencies, they are already included.=
If you get ClassNotFound
+ errors then check this list for possible missing or redund=
ant
+ directories/jars.
+
+
+
+ Empty
+
+
+
+
+
+ Include default classpath from project
+
+
+
+ When enabled the project classpath will be appended to=
the classpath specified
+ above
+
+
+
+ Enabled
+
+
+
+
+
+
+
+
+
+
+ Mappings
+ for additional mappings
+
+
+
+
+ Specifying additional Mappings in Hibernate Console Configura=
tion
+
+
+
+
+
+
+
+
+
+
+
+ Parameters of the Mappings tab of the Hibernate Console Configuration
+ wizard are explained below:
+
+ Hibernate Console Configuration Mappings
+
+
+
+
+
+
+
+
+
+
+
+ Parameter
+
+
+
+ Description
+
+
+
+ Auto detected value
+
+
+
+
+
+
+
+ Mapping files
+
+
+
+ List of additional mapping files that should be loaded=
. Note: A
+ hibernate.cfg.xml or persistence.xml can also contain mapp=
ings. Thus if these are
+ duplicated here, you will get "Duplicate mapping" errors w=
hen using the console
+ configuration.
+
+
+
+ empty
+
+
+
+
+
+
+
+
+ and the last tab
+ Common
+
+
+
+
+
+ Common Tab of the Console Configuration Wizard
+
+
+
+
+
+
+
+
+ It allows to define general aspects of the launch configuration =
including storage
+ location, console encoding and some others.
+
+ Clicking
+ Finish
+ creates the configuration and shows it in the Hibernate Configurations
+ view.
+
+
+ Console Overview
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reverse Engineering and Code Generation
+
+ A "click-and-generate"=
reverse engineering and code generation facility
+ is available. This facility allows you to generate a range of artifa=
cts based on database or
+ an already existing Hibernate configuration, be that mapping files o=
r annotated classes. Some
+ of these are POJO Java source file, Hibernate
+ .hbm.xml
+ ,
+ hibernate.cfg.xml
+ generation and schema documentation.
+
+ To start working with this process, start the Hibernate Code
+ Generation which is available in the toolbar via the
+ Hibernate<=
diffmk:wrapper diffmk:change=3D"changed"> icon or via the =
+ Run > Hibernate Code Generation
+ menu item.
+
+
+ Code Generation Launcher
+
+ When you click on
+ Open Hibernate Code Generation Dialo=
g...
+ the standard Eclipse launcher dialog will appear. In t=
his dialog you can create,
+ edit and delete named Hibernate code generation "launchers".
+
+
+ Getting Hibernate Code Generation Wizard
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Hibernate Code Generation Wizard
+
+
+
+
+
+
+
+
+
+
+
+ The first time you create a code generation launcher you shoul=
d give it a meaningful
+ name, otherwise the default prefix
+ New_Generation
+ will be used.
+
+
+ Tip:
+ The "At least one exporter option must be selected" is just a
+ warning stating that for this launch to work you need to select =
an exporter on the
+ Exporter tab. When an exporter has been selected the warning wil=
l disappear.
+
+
+ The dialog also have the standard tabs
+ Refresh
+ and
+ Common
+ that can be used to configure which directories should=
be automatically
+ refreshed and various general settings launchers, such as saving t=
hem in a project for
+ sharing the launcher within a team.
+
+ On the
+ Main
+ tab you see the following fields:
+
+
+ Code generation "Main" tab fields
+
+
+
+
+
+
+
+
+
+
+
+ Field
+
+
+
+ Description
+
+
+
+
+
+
+
+ Console Configuration
+
+
+
+ The name of the console configuration which should b=
e used when code
+ generating
+
+
+
+
+
+ Output directory
+
+
+
+ Path to a =
directory where all output will be written by default. Be aware that
+ existing files will be overwritten, so be sure to specif=
y the correct
+ directory.
+
+
+
+
+
+ Reverse engineer from JDBC Connection
+
+
+
+ If enabled, the tools will reverse engineer the data=
base available via the
+ connection information in the selected Hibernate Console=
Configuration and
+ generate code based on the database schema. If not enabl=
ed, the code generation
+ will just be based on the mappings already specified in =
the Hibernate Console
+ configuration.
+
+
+
+
+
+ Package
+
+
+
+ The package name here is used as the default package=
name for any entities
+ found when reverse engineering
+
+
+
+
+
+ reveng.xml
+
+
+
+ Path to a reveng.xml file. A reveng.xml file allows =
you to control certain
+ aspects of the reverse engineering. e.g. how jdbc types =
are mapped to hibernate
+ types and especially important which tables are included=
/excluded from the
+ process. Clicking "setup" allows you to select an existi=
ng reveng.xml file or
+ create a new one. See more details about the reveng.xml =
file in .
+
+
+
+
+
+ reveng. strategy
+
+
+
+ If reveng.xml does not provide enough customization =
you can provide your own
+ implementation of an ReverseEngineeringStrategy. The cla=
ss needs to be in the
+ classpath of the Console Configuration, otherwise you wi=
ll get class not found
+ exceptions. See for details and an
+ example of a custom strategy.
+
+
+
+
+
+ Generate basic typed composite ids
+
+
+
+ A table that has a multi-colum primary key a <com=
posite-id>
+ mapping will always be created. If this option is enable=
d and there are matching
+ foreign-keys each key column is still considered a 'basi=
c' scalar (string, long,
+ etc.) instead of a reference to an entity. If you disabl=
e this option a
+ <key-many-to-one> instead. Note: a <many-to-one=
>
+ property is still created, but is simply marked as non-u=
pdatable and
+ non-insertable.
+
+
+
+
+
+ Detect optimistic lock columns
+
+
+
+ Automatically detect optimistic lock columns. Contro=
llable via reveng.
+ strategy; the current default is to use columns named VE=
RSION or TIMESTAMP.
+
+
+
+
+
+ Detect many-to-many tables
+
+
+
+ Automatica=
lly detect many-to-many tables. Controllable via reveng.
+ strategy.
+
+
+
+
+
+ Use custom templates
+
+
+
+ If enabled, the Template directory will be searched =
first when looking up the
+ templates, allowing you to redefine how the individual t=
emplates process the
+ hibernate mapping model.
+
+
+
+
+
+ Template directory
+
+
+
+ A path to a directory with custom templates
+
+
+
+
+
+
+
+
+ Exporters
+
+ The
+ Exporters
+ tab is used to specify which type of code that should =
be generated. Each
+ selection represents an Exporter that is responsible for generatin=
g the code, hence the
+ name.
+
+
+ Selecting Exporters
+
+
+
+
+
+
+
+
+
+
+
+ The following table describes in short the various exporters. =
Remember you can
+ add/remove any Exporters depending on your needs.
+
+
+ Code generation "Exporter" tab fields
+
+
+
+
+
+
+
+
+
+ Field
+
+
+
+ Description
+
+
+
+
+
+
+
+ Domain code
+
+
+
+ Generates POJO's for all the persistent classes and =
components found in the
+ given Hibernate configuration.
+
+
+
+
+
+ DAO code
+
+
+
+ Generates a set of DAO's for each entity found.
+
+
+
+
+
+ Hibernate XML Mappings
+
+
+
+ Generate mapping (hbm.xml) files for each entity.
+
+
+
+
+
+ Hibernate XML Configuration
+
+
+
+ Generate a hibernate.cfg.xml file. Used to keep the =
hibernate.cfg.xml update
+ with any new found mapping files.
+
+
+
+
+
+ Schema Documentation (.html)
+
+
+
+ Generates a set of html pages that documents the dat=
abase schema and some of
+ the mappings.
+
+
+
+
+
+ Generic Exporter (hbmtemplate)
+
+
+
+ Fully custom=
izable exporter which can be used to perform custom
+ generation.
+
+
+
+
+
+ Schema Export (.ddl)
+
+
+
+ Generates the appropriate SQL DDL and allows you to store the r=
esult in a file
+ or export it directly to the database.<=
/para>
+
+
+
+
+
+
+
+ Each Exporter listens to certain properties and these can be s=
etup in the
+ Properties
+ section where you can add/remove predefined or custome=
r properties for each of
+ the exporters. The following table lists the time of writing prede=
fined properties:
+
+
+
+ Exporter Properties
+
+
+
+
+
+
+
+
+
+ Name
+
+
+
+ Description
+
+
+
+
+
+
+
+ jdk5
+
+
+
+ Generate Java 5 syntax
+
+
+
+
+
+ ejb3
+
+
+
+ Generate EJB 3 annotations
+
+
+
+
+
+ for_each
+
+
+
+ Specifies for which type of model elements the exp=
orter should create a file
+ and run through the templates. Possible values are: en=
tity, component,
+ configuration
+
+
+
+
+
+ template_path
+
+
+
+ Custom template directory for this specific export=
er. You can use Eclipse
+ variables.
+
+
+
+
+
+ template_name
+
+
+
+ Name for template relative to the template path
+
+
+
+
+
+ outputdir
+
+
+
+ Custom output directory for this specific exporter=
. You can use Eclipse
+ variables.
+
+
+
+
+
+ file_pattern
+
+
+
+ Pattern to use for the generated files, relatively=
for the output dir.
+ Example: {package-name}/{class-name}.java .
+
+
+
+
+
+
+
+ dot.executable
+
+
+
+ Executable to run GraphViz (only relevant, but opt=
ional for Schema
+ documentation)
+
+
+
+
+
+ drop
+
+
+
+ Output will contain drop statements for the tables, indices a=
nd
+ constraints
+
+
+
+
+
+ delimiter
+
+
+
+ If specified the statements will be dumped to this file
+
+
+
+
+
+ create
+
+
+
+ Output will contain create statements for the tables, indices=
and
+ constraints
+
+
+
+
+
+ scriptToConsole
+
+
+
+ The script will be output to Console
+
+
+
+
+
+ exportToDatabase
+
+
+
+ Executes the generated statements against the database
+
+
+
+
+
+ outputFileName
+
+
+
+ If specified the statements will be dumped to this file
+
+
+
+
+
+ haltOnError
+
+
+
+ Halts the build process if an error occurs=
para>
+
+
+
+
+
+ format
+
+
+
+ Applies basic formatting to the statements=
para>
+
+
+
+
+
+ schemaUpdate
+
+
+
+ Updates a schema
+
+
+
+
+
+
+
+ To add a property to the chosen Exporter click the
+ Add
+ button in the =
Properties section. In the appeared dialog
+ you should select the property from the proposed list and the valu=
e for it.
+
+
+ Adding the Property for Schema Export (.ddl)
+
+
+
+
+
+
+
+
+
+ Tip:
+
+ If the property is a directory, it is
+ possible to browse directories in the Value field.
+
+ =
+
+ Specifying the Property Value
+ =
+
+
+
+
+
+
+
+
+
+
+ Hibernate Mapping and Configuration File Editor
+
+ The Hibernate Mapping File editor provides XML editing functionality
+ for the
+ hbm.xml
+ and
+ cfg.xml
+ files. The editor is based on the Eclipse WTP tools and =
extends its functionality
+ to provide Hibernate specific code completion.
+
+
+ XML Editing Functionality
+
+
+
+
+
+
+
+
+
+
+
+
+ Java property/class completion
+
+ Package, class, and field completion is enabled for relevant X=
ML attributes. The
+ auto-completion detects its context and limits the completion for =
e.g.
+ <property>
+ and only shows the properties/fields available in the =
enclosing
+ <class>
+ ,
+ <subclass>
+ etc. It is also possible to navigate from the
+ hbm.xml
+ files to the relevant class/field in java code.
+
+
+ Navigation Functionality
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This is done via the standard hyperlink navigation functionali=
ty in Eclipse; per default
+ it is done by pressing F3 while the cursor is on a class/field or =
by pressing
+ Ctrl
+ and the mouse button to perform the same navigation.=
para>
+
+ For java completion and navigation to work the file needs to r=
eside inside an Eclipse
+ Java project, otherwise no completion will occur.
+
+ Note:
+ Java completion does not require a Hibernate console configu=
ration to be used.
+
+
+
+
+ Table/Column completion
+
+ Table and column completion is also available for all table an=
d column attributes.
+
+
+ Table and Column Completion
+
+
+
+
+
+
+
+
+
+
+
+
+ Important:
+ Table/Column completion requires a proper configured hiberna=
te console configuration
+ and this configuration should be the default for the project whe=
re the
+ hbm.xml
+ resides.
+
+
+ You can check which console configuration is selected under th=
e Properties of a project
+ and look under the
+ Hibernate Settings
+ page. When a proper configuration is selected it will =
be used to fetch the
+ table/column names in the background.
+
+
+ Note:
+ Currently it is not recommended to use this feature on large=
databases since it does
+ not fetch the information iteratively. It will be improved in fu=
ture versions.
+
+
+
+
+ Configuration property completion
+
+ In
+ cfg.xml
+ code completion for the value of
+ <property> name
+ attributes is available.
+
+
+
+ Property Completion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Structured Hibernate Mapping and Configuration File Editor
+ The structured editor represents the file in the tree form. It a=
lso allows to modify the
+ structure of the file and its elements with the help of tables provi=
ded on the right-hand
+ area.
+
+ To open any mapping file in the editor, choose
+ Open With > Hibernate 3.0 XML Edito=
r
+ option from th=
e context menu of the file. The editor should look as
+ follows:
+
+
+ Structured hbm.xml Editor
+
+
+
+
+
+
+
+
+ For the configuration file you should choose
+ Open With > Hibernate Configuration=
3.0 XML Editor
+ option.
+
+
+ Structured cfg.xml Editor
+
+
+
+
+
+
+
+
+
+
+
+ Reveng.xml Editor
+
+ A
+ reveng.xml
+ file is used to customize and control how reverse engine=
ering is performed by the
+ tools. The plugins provide an editor to ease the editing of this fil=
e and hence used to
+ configure the reverse engineering process.
+
+ The editor is intended to allow easy definition of type mappings=
, table include/excludes
+ and specific override settings for columns, e.g. define an explicit =
name for a column when the
+ default naming rules are not applicable.
+
+
+ Note:
+ Not all the features of the
+ .reveng.xml
+ file are exposed or fully implemented in the editor, b=
ut the main functionality
+ is there. To understand the full flexibility of the
+ reveng.xml
+ , please see <=
/xref>
+
+
+
+ The editor is activated as soon as an
+ .reveng.xml
+ file is opened. To get an initial
+ reveng.xml
+ file the Reverse Engineering=
File Wizard can be started via
+ Ctrl+N
+ and
+ Hibernate > Hibernate Reverse Engin=
eering File (reveng.xml)
+ then.
+
+
+ Overview Page
+
+
+
+
+
+
+
+
+
+
+
+ Or you can get it via the Code Gener=
ation Launcher by checking the
+ proper section in the
+ Main
+ tab of the Hibernate Code Generation
+ Wizard.
+
+ The following screenshot shows the
+ Overview
+ page where the wanted console configuration is selected =
(auto-detected if
+ Hibernate 3 support is enabled for the project)
+
+
+ Overview Page
+
+
+
+
+
+
+
+
+
+
+
+ The
+ Table Filter
+ page allows you to specify which tables to include and e=
xclude. Pressing
+ Refresh
+ shows the tables from the database that have not yet bee=
n excluded.
+
+
+ Table Filters Page
+
+
+
+
+
+
+
+
+
+
+
+ The
+ Type Mappings
+ page is used for specifying type mappings from JBDC type=
s to any Hibernate type
+ (including usertypes) if the default rules are not applicable. Here =
again to see the database
+ tables press
+ Refresh
+ button underneath. More about type mappings you can find=
further in the Type Mappings section.
+
+
+ Type Mappings Page
+
+
+
+
+
+
+
+
+
+
+
+ The
+ Table and Columns
+ page allows you to explicit set e.g. which hibernatetype=
and propertyname that
+ should be used in the reverse engineered model. For more details on =
how to configure the
+ tables while reverse engineering read the Specific table
+ configuration section.
+
+
+ Table and Columns Page
+
+
+
+
+
+
+
+
+
+
+
+ Now that you have configured all necessary parts, you can learn =
how to work with
+ Hibernate Console Perspective.
+
+
+
+ Hibernate Console Perspective
+
+ The Hibernate Console Perspective combines a set of views which allow
+ you to see the structure of your mapped entities/classes, edit HQL q=
ueries, execute the
+ queries, and see the results. To use this perspective you need to cr=
eate a Console configuration.
+
+
+ Viewing the entity structure
+
+ To view your new configuration and entity/class structure, swi=
tch to Hibernate
+ Configurations View. Expanding the tree allows you to=
browse the class/entity
+ structure and see the relationships.
+
+
+ Hibernate Console Perspective
+
+
+
+
+
+
+
+
+
+
+
+
+ The Console Configuration does not dynamically adjust to changes
+ done in mappings and java code. To reload the configuration select=
the configuration and
+ click the
+ Reload
+ button in the view toolbar or in the context menu.
+
+ Besides, it's possible to open source and mapping files for ob=
jects showed in
+ Hibernate Configurations View. Just bring up the context menu for a
+ necessary object and select
+ Open Source File
+ to see appropriate Java class or
+ Open Mapping File
+ to open a proper
+ .hbm.xml.
+
+
+ Opening Source for Objects
+
+
+
+
+
+
+
+
+
+ Mapping Diagram
+
+ In order to get a visual feel on how entities are related as=
well as view their
+ structures, a Mapping Diagram is provided. It is available by right
+ clicking on the entity you want a mapping diagram for and then c=
hoosing
+ Open Mapping Diagram.=
emphasis>
+
+
+ Mapping Diagram
+
+
+
+
+
+
+
+
+
+
+
+ For better navigating on the Diagram use Outline view which is
+ available in the structural and graphical modes.
+
+ Navigating in the Structural Mode
+
+
+
+
+
+
+
+
+ To switch over between the modes use the buttons in the top-=
right corner of the
+ Outline view.
+
+
+ Navigating in the Graphical Mode
+
+
+
+
+
+
+
+
+ As in Hibernate Configurations V=
iew in Mapping
+ Diagram it's also possible to open=
source/mapping file for a chosen
+ object by selecting appropriate option in the context menu.
+
+
+ Navigating on the Diagram
+
+
+
+
+
+
+
+
+ If you ask to open source/mapping file by right clicking on =
any entity element, this
+ element will be highlighted in the open file.
+
+
+ Opening Source for Object
+
+
+
+
+
+
+
+
+ Finally, if you need to have your Diagram exported as .png
+ ,
+
+ .jpeg
+ or .bmp , you should right-click
+ anywhere in the Mapping Diagram edit=
or and select
+ Export as Image
+ .
+
+
+ Mapping Diagram Export
+
+
+
+
+
+
+
+
+ As you can see on the figure above, Undo,
+
+ Redo
+ and
+ Auto layout
+ options are also available through the context menu.=
+
+
+
+
+ Prototyping Queries
+
+ Queries can be prototyped by entering them in the HQL or
+ Criteria Editor. The quer=
y editors are opened by right-clicking the
+ Console Configuration and=
selecting either HQL
+ Editor or Hibernate Criteria Editor. The editors
+ automatically detect the chosen configuration.
+
+ If the menu item is disabled then you need at first to create =
a Session
+ Factory. That is done by simply expanding the Session
+ Factory node.
+
+ By brining up the context menu for a chosen entity or property=
in the Console
+ Configuration and opening
+ HQL Editor
+ or
+ Hibernate Criteria Editor
+ you'll get a prefill query.
+
+
+ Entering Simple Queries
+
+
+
+
+
+
+
+
+
+
+ To copy a portion of code from .java file into a HQL or Criter=
ia editor, make use of the
+ Quick Fix option (Ctrl + 1).
+
+
+ Quick Fix Option Demonstration
+
+
+
+
+
+
+
+ You can also update the original java code according to change=
s in the HQL or Criteria
+ editor. For that you should save your HQL/Criteria query and submi=
t the replacing in
+ appeared confirmation dialog.
+
+
+ Updating Java Code
+
+
+
+
+
+
+
+
+ Executing the query is done by clicking the green run button i=
n the toolbar or pressing
+ Ctrl+Enter
+ .
+
+ Errors during creation of the Sess=
ion Factory or running the
+ queries (e.g. if your configuration or query is incorrect) will be=
shown in a message dialog
+ or inclined in the view that detected the error, you may get more =
information about the
+ error in the Error Log View=
on the right pane.
+
+ Results of a query will be shown in the Hibernate Query Result View
+ and details of possible errors (syntax errors, database errors, et=
c.) can be seen in the
+ Error Log View.
+
+
+
+ Note:
+ HQL queries are executed by default using list() thus without any
+ limit of the size of the output the query could return a large r=
esult set. You might run
+ out of memory. To avoid this you can put a value in the Max resu=
lts field to reduce the
+ number of elements returned.
+
+
+
+ Dynamic Query Translator
+
+ If the Hibernate Dynamic Query T=
ranslator View is visible while
+ writing in the HQL Editor=
it will show the generated SQL for a HQL
+ query.
+
+
+ Hibernate Dynamic Query Translator View
+
+
+
+
+
+
+
+
+
+
+
+ The translation is done each time you stop typing into the e=
ditor, if there are errors
+ in the HQL the parse exception will be shown embedded in the vie=
w.
+
+
+
+
+ Properties View
+
+ As you can see on the figure, Prop=
erties view shows the number of
+ query results as well as the time of executing.
+
+
+ Properties View
+
+
+
+
+
+
+
+
+
+
+
+ It also displays the structure of any persistent object select=
ed in the
+ Hibernate Query Results View. Editing is not yet supported.
+
+
+ Properties View for Selected Object
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Enable debug logging in the plugins
+
+ It is possible to configure the eclipse plugin to route all logg=
ing made by the plugins
+ and hibernate code it self to the Error =
Log View in Eclipse.
+
+ This is done by editing the
+ hibernate-log4j.properties
+ in
+ org.hibernate.eclipse/ directory/jar=
property>
+ . This file includes a default configuration that only lo=
gs WARN and above to a set
+ of custom appenders (PluginFileAppender and PluginLogAppender). You =
can change these settings
+ to be as verbose or silent as you please - see Hibernate Documentation for interesting c=
ategories and Log4j documentation.
+
+
+ Relevant Resources Links
+ Find more on how to configure logging via a log4j property fil=
e in Log4j documentation.
+
+
+
+
+ Hibernate support for Dali plugins in Eclipse WTP
+
+ Starting from 3.0.0 Alpha1 version of JBoss Tools Hibernate plugins
+ support Eclipse Dali integration what now makes it possible to use a=
Hibernate as a complete
+ JPA development platform.
+
+ When starting your new JPA project from
+ New > Other... > JPA > JPA Pr=
oject
+ (or simply
+ New > JPA Project
+ in JPA Perspective) on the JPA Facet page you'll be
+ prompted to choose Hibernate as a target platform.
+
+
+ Targeting at Hibernate Platform
+
+
+
+
+
+
+
+ By enabling Hibernate platform specific features you can now gen=
erate DDL and Entities.
+ For that find
+ JPA Tools > Generate DDL.../Generat=
e Entities...
+ options in the context menu of your JPA project.
+
+
+ Generate DDL/Entities
+
+
+
+
+
+
+
+ The Generate DDL/Entities wizards first will ask you to choose t=
he Console
+ Configuration.
+
+
+ Generate Entities Wizard
+
+
+
+
+
+
+
+
+ Note:
+
+ Please note, currently the wizards require that you have a
+
+
+
+ =
+ =
+
+ Ant Tools
+
+ Maybe somebody will find it more preferable to use Ant for generat=
ion purposes. Thus, this
+ chapter is intended to get you ready to start using Hibernate Tools vi=
a Ant tasks.
+
+
+ Introduction
+
+ The
+ hibernate-tools.jar
+ contains the core for the Hi=
bernate Tools. It is used as the
+ basis for both the Ant tasks described in this document and the ecli=
pse plugins both available
+ from tools.hibernate.org. The
+ hibernate-tools.jar
+ is located in your eclipse plugins directory at
+ /plugins/org.hibernate.eclipse.x.x.x/l=
ib/tools/hibernate-tools.jar.
+ This jar is 100% independent from the eclipse platform and can t=
hus be used independently
+ of eclipse.
+
+
+ Note:
+ There might be incompatibilities with respect to the Hibernate=
3.jar bundled with the
+ tools and your own jar. Thus to avoid any confusion it is recommen=
ded to use the
+ hibernate3.jar and hibernate-annotations.jar bundled with the tool=
s when you want to use the
+ Ant tasks. Do not worry about using e.g. Hibernate 3.2 jar's with =
e.g. a Hibernate 3.1
+ project since the output generated will work with previous Hiberna=
te 3 versions.
+
+
+
+
+ The <hibernatetool> Ant Task
+
+ To use the ant tasks you need to have the
+ hibernatetool
+ task defined. That is done in your
+ build.xml
+ by inserting the following xml (assuming the jars are in=
the
+ lib directory):
+
+
+
+
+
+
+
+ =
+
+]]>
+
+ This
+
+ <taskdef>
+
+ defines an Ant task called
+ hibernatetool
+ which now can be used anywhere in your ant
+ build.xml
+ files. It is important to include all the Hibernate Tools
+ dependencies as well as the jdbc driver.
+
+ Notice that to use the annotation based Configuration you must <=
ulink url=3D"http://annotations.hibernate.org">get a release.
+
+
+
+ When using the
+ hibernatetool
+ task you have to specify one or more of the following:=
para>
+
+
+
+
+
+ (||
+ |)
+ (,,,...) =
+]]>
+
+
+ Hibernatetool attributes
+
+
+
+
+
+
+
+
+
+
+
+
+ Attribute name
+
+ Definition
+
+ Attribute use
+
+
+
+
+
+
+ destdir
+
+
+
+ Destination directory for files generated with exporte=
rs
+
+
+
+ Required
+
+
+
+
+
+ templatepath
+
+
+
+ A path to be used to look up user-edited templates
+
+
+
+ Optional
+
+
+
+
+
+ classpath
+
+
+
+ A classpath to be used to resolve resources, such as m=
appings and
+ usertypes
+
+
+
+ Optional, but very often required
+
+
+
+
+
+
+ property (and propertyset)
+
+
+
+ Used to set properties to control the exporters. Mostl=
y relevant for providing
+ custom properties to user defined templates
+
+
+
+ Optional
+
+
+
+
+
+ configuration (annotationconfiguration, jpaconfigurati=
on,
+ jdbcconfiguration)
+
+
+
+ One of four different ways of configuring the Hibernat=
e Meta Model must be
+ specified
+
+
+
+
+
+
+
+
+
+ hbm2java (hbm2cfgxml, hbmtemplate, etc.)
+
+
+
+ One or more of the exporters must be specified
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Basic examples
+
+ The following example shows the most basic setup for generatin=
g pojo's via
+ <hbm2java>
+ from a normal
+
+ hibernate.cfg.xml
+ . The output will be put in the
+ ${build.dir}/generated
+ directory.
+
+
+
+
+
+ =
+
+
+]]>
+
+
+ The following example is similar, but now we are performing mu=
ltiple exports from the
+ same configuration. We are exporting the schema via
+ <hbm2dll>, generates some DAO code via
+ <hbm2dao>
+ and finally runs a custom code generation via
+ <hbmtemplate>. This is again from a normal
+ hibernate.cfg.xml
+ and the output is still put in the
+
+ ${build.dir}/generated
+
+ directory. Furthermore the example also shows where a =
classpath is specified
+ when you e.g. have custom usertypes or some mappings that is neede=
d to be looked up as a
+ classpath resource.
+
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+
+
+ Hibernate Configurations
+
+ Hibernatetool supports four=
different Hibernate configurations: A
+ standard Hibernate configuration
+ (<configuration>), =
emphasis> Annotation based
+ configuration (<annotation=
configuration>),
+ JPA persistence based configuration
+ (<jpaconfiguration>=
) and a JDBC based
+ configuration (<jdbcconfig=
uration>)
+ for use when reverse engineering.
+
+ Each have in common that they are able to build up a Hibernate C=
onfiguration object from
+ which a set of exporters can be run to generate various output.
+
+
+ Note:
+ Output can be anything, e.g. specific files, statements execut=
ion against a database,
+ error reporting or anything else that can be done in java code.
+
+
+ The following sections describe what the various configurations =
can do, plus lists the
+ individual settings they have.
+
+
+ Standard Hibernate Configuration (<configuration>)
+
+ A
+ <configuration>
+ is used to define a standard Hibernate configuration. =
A standard Hibernate
+ configuration reads the mappings from a
+ cfg.xml
+ and/or a fileset.
+
+
+
+ =
+ ]]>
+
+
+ Configuration attributes
+
+
+
+
+
+
+
+
+
+
+
+
+ Attribute name
+
+ Definition
+
+ Attribute use
+
+
+
+
+
+
+ configurationfile
+
+
+
+ The name of a Hibernate configuration file, e.g. "hi=
bernate.cfg.xml"
+
+
+
+ Optional
+
+
+
+
+
+ propertyfile
+
+
+
+ The name of a property file, e.g. "hibernate.propert=
ies"
+
+
+
+ Optional
+
+
+
+
+
+ entity-resolver
+
+
+
+ Name of a class that implements org.xml.sax.EntityRe=
solver. Used if the
+ mapping files require custom entity resolver
+
+
+
+ Optional
+
+
+
+
+
+
+ namingstrategy
+
+
+
+ Name of a class that implements org.hibernate.cfg.Na=
mingStrategy. Used for
+ setting up the naming strategy in Hibernate which contro=
ls the automatic naming of
+ tables and columns.
+
+
+
+ Optional
+
+
+
+
+
+ fileset
+
+
+
+ A standard Ant fileset. Used to include hibernate ma=
pping files. Remember that
+ if mappings are already specified in the hibernate.cfg.x=
ml then it should not be
+ included via the fileset as it will result in duplicate =
import exceptions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Example
+
+ This example shows an example where no
+
+ hibernate.cfg.xml
+
+ exists, and a
+ hibernate.properties
+ and fileset is used instead.
+
+
+ Note:
+ Hibernate will still read any global
+ hibernate.properties
+ available in the classpath, but the specified prop=
erties file here will
+ override those values for any non-global property.
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+
+
+ Annotation based Configuration (<annotationconfiguration&g=
t;)
+
+ An
+ <annotationconfiguration>
+ is used when you want to read the metamodel from EJB3/=
Hibernate Annotations
+ based POJO's.
+
+
+ Important:
+ To use it remember to put the jar files needed for using hib=
ernate annotations in the
+ classpath of the
+ <taskdef>, i. e.
+ hibernate-annotations.jar and hibernate-commons-annotations.jar.=
+
+
+ The
+ <annotationconfiguration>
+ supports the same attributes as a
+ <configuration>
+ except that the configurationfile attribute is now req=
uired as that is from
+ where an AnnotationConfiguration gets the list of classes/packages it
+ should load.
+
+ Thus the minimal usage is:
+
+
+
+
+
+
+
+]]>
+
+
+
+
+ JPA based configuration (<jpaconfiguration>)
+
+ A
+ <jpaconfiguration>
+ is used when you want to read the metamodel from JPA/H=
ibernate Annotation where
+ you want to use the auto-scan configuration as defined in the JPA =
spec (part of EJB3). In
+ other words, when you do not have a
+ hibernate.cfg.xml, but instead have a setup where you use
+ a
+ persistence.xml
+ packaged in a JPA compliant manner.
+
+ The
+ <jpaconfiguration>
+ will simply just try and auto-configure it self based =
on the available
+ classpath, e.g. look for
+ META-INF/persistence.xml.=
+
+ The
+ persistenceunit
+ attribute can be used to select a specific persistence=
unit. If no
+ persistenceunit
+ is specified it will automatically search for one and =
if a unique one is found,
+ use it, but if multiple persistence units are available it will er=
ror.
+
+ To use a
+ <jpaconfiguration>
+ you will need to specify some additional jars from Hib=
ernate EntityManager in
+ the
+ <taskdef>
+ of the hibernatetool. The following shows a full setup=
:
+
+
+
+
+
+
+
+ =
+
+ =
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+ Note:
+ ejb3configuration was the name used in previous versions. It=
still works but will emit
+ a warning telling you to use jpaconfi=
guration instead.
+
+
+
+
+
+ JDBC Configuration for reverse engineering (<jdbcconfigura=
tion>)
+
+ A
+
+ <jdbcconfiguration>
+
+ is used to perform reverse engineering of the database=
from a JDBC connection.
+
+ This configuration works by reading the connection properties =
either from
+ hibernate.cfg.xml
+ or
+ hibernate.properties
+ with a fileset.
+
+ The
+
+ <jdbcconfiguration>
+
+ has the same attributes as a
+
+ <configuration>
+
+ plus the following additional attributes:
+
+
+ ...
+ ]]>
+
+
+ Jdbcconfiguration attributes
+
+
+
+
+
+
+
+
+
+
+
+
+ Attribute name
+
+ Definition
+
+ Attribute use
+
+
+
+
+
+
+ packagename
+
+
+
+ The default package name to use when mappings for cl=
asses are created
+
+
+
+ Optional
+
+
+
+
+
+ revengfile
+
+
+
+ The name of a property file, e.g. "hibernate.propert=
ies"
+
+
+
+ Optional
+
+
+
+
+
+ reversestrategy
+
+
+
+ Name of a class that implements
+ org.hibernate.cfg.reveng.ReverseEngineeringStrategy. Use=
d for setting up the
+ strategy the tools will use to control the reverse engin=
eering, e.g. naming of
+ properties, which tables to include/exclude etc. Using a=
class instead of (or as
+ addition to) a reveng.xml file gives you full programmat=
ic control of the reverse
+ engineering.
+
+
+
+ Optional
+
+
+
+
+
+
+ detectManytoMany
+
+
+
+ If true, tables which are pure many-to-many link tab=
les will be mapped as
+ such. A pure many-to-many table is one which primary-key=
contains exactly two
+ foreign-keys pointing to other entity tables and has no =
other columns.
+
+
+
+ Default: true
+
+
+
+
+
+ detectOptimisticLock
+
+
+
+ If true, columns named VERSION or TIMESTAMP with app=
ropriate types will be
+ mapped with the appropriate optimistic locking correspon=
ding to
+ <version> or <timestamp>.
+
+
+
+ Default: true
+
+
+
+
+
+
+
+
+
+ Example
+
+ Here is an example of using
+
+ <jdbcconfiguration>
+
+ to generate Hibernate xml mappings via
+ <hbm2hbmxml>. The connection settings here
+ is read from a
+ hibernate.properties
+ file but could just as well have been read from a
+ hibernate.cfg.xml.
+
+
+
+ =
+
+]]>
+
+
+
+
+
+ Exporters
+
+ Exporters are the parts that do the actual job of converting the=
hibernate metamodel into
+ various artifacts, mainly code. The following section describes the =
current supported set of
+ exporters in the Hibernate Tool distribution. It is also possible for
+ userdefined exporters, that is done through the
+
+ <hbmtemplate>
+
+ exporter.
+
+
+ Database schema exporter (<hbm2ddl>)
+
+
+ <hbm2ddl>
+ lets you run schemaexport and schemaupdate which gener=
ates the appropriate SQL
+ DDL and allow you to store the result in a file or export it direc=
tly to the database.
+ Remember that if a custom naming strategy is needed it is placed o=
n the configuration
+ element.
+
+ ]]>
+
+
+ Hbm2ddl exporter attributes
+
+
+
+
+
+
+
+
+
+
+
+
+ Attribute name
+
+ Definition
+
+ Attribute use
+
+
+
+
+
+
+ export
+
+
+
+ Executes the generated statements against the databa=
se
+
+
+
+ Default: true
+
+
+
+
+
+ update
+
+
+
+ Try and create an update script representing the "de=
lta"
+ between what is in the database and what the mappings sp=
ecify. Ignores
+ create/update attributes. (Do *not* use agains=
t production databases, no
+ guarantees at all that the proper delta can be generat=
ed nor that the underlying
+ database can actually execute the needed operations).
+
+
+
+ Default: false
+
+
+
+
+
+ drop
+
+
+
+ Output will contain drop statements for the tables, =
indices and
+ constraints
+
+
+
+ Default: false
+
+
+
+
+
+
+ create
+
+
+
+ Output will contain create statements for the tables=
, indices and
+ constraints
+
+
+
+ Default: true
+
+
+
+
+
+ outputfilename
+
+
+
+ If specified the statements will be dumped to this f=
ile
+
+
+
+ Optional
+
+
+
+
+
+ delimiter
+
+
+
+ If specified the statements will be dumped to this f=
ile
+
+
+
+ Default: ";"
+
+
+
+
+
+ format
+
+
+
+ Apply basic formatting to the statements
+
+
+
+ Default: false
+
+
+
+
+
+ haltonerror
+
+
+
+ Halt build process if an error occurs
+
+
+
+ Default: false
+
+
+
+
+
+
+
+
+ Example
+
+ Basic example of using
+ <hbm2ddl>, which does not export to the
+ database but simply dumps the sql to a file named
+ sql.ddl.
+
+
+
+
+]]>
+
+
+
+
+ POJO java code exporter (<hbm2j=
ava>)
+
+
+ <hbm2java>
+ is a java codegenerator. Options for controlling wheth=
er JDK 5 syntax can be
+ used and whether the POJO should be annotated with EJB3/Hibernate =
Annotations.
+
+ ]]>
+
+
+ Hbm2java exporter attributes
+
+
+
+
+
+
+
+
+
+
+
+
+ Attribute name
+
+ Definition
+
+ Default value
+
+
+
+
+
+
+ jdk
+
+
+
+ Code will contain JDK 5 constructs such as generics =
and static imports
+
+
+
+ False
+
+
+
+
+
+ ejb3
+
+
+
+ Code will contain EJB 3 features, e.g. using annotat=
ions from
+ javax.persistence and org.hibernate.annotations
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ Example
+
+ Basic example of using
+ <hbm2java>
+ to generate POJO's that utilize jdk5 constructs.
+
+
+
+
+]]>
+
+
+
+
+ Hibernate Mapping files exporter (=
<hbm2hbmxml>)
+
+
+ <hbm2hbmxml>
+ generates a set of .hbm files. Intended to be used tog=
ether with a
+ <jdbcconfiguration>
+ when performing reverse engineering, but can be used w=
ith any kind of
+ configuration. e.g. to convert from annotation based pojo's to
+ hbm.xml.
+
+
+ Note:
+ Not every possible mapping transformation is possible/implem=
ented (contributions
+ welcome) so some hand editing might be necessary.
+
+
+ ]]>
+
+
+ Example
+
+ Basic usage of
+ <hbm2hbmxml>.
+
+
+
+
+]]>
+
+
+ <hbm2hbmxml>
+ is normally used with a
+ <jdbcconfiguration>
+ like in the above example, but any other configurati=
on can also be used to
+ convert between the different ways of performing mappings. Here =
is an example of that,
+ using an
+ <annotationconfiguration>
+ .
+
+
+ Note:
+ Not all conversions are implemented (contributions welcome=
), so some hand editing
+ might be necessary.
+
+
+
+
+
+]]>
+
+
+
+
+ Hibernate Configuration file exporter (<hbm2cfgxml>)
+
+
+ <hbm2cfgxml>
+ generates a
+ hibernate.cfg.xml. Intended to be used together with a
+ <jdbcconfiguration>
+ when performing reverse engineering, but it can be use=
d with any kind of
+ configuration. The
+ <hbm2cfgxml>
+ will contain the properties used and adds mapping entr=
ies for each mapped class.
+
+
+]]>
+
+
+ Hbm2cfgxml exporter attribute
+
+
+
+
+
+
+
+
+
+
+
+
+ Attribute name
+
+ Definition
+
+ Default value
+
+
+
+
+
+
+
+ ejb3
+
+
+
+ The generated cfg.xml will have <mapping class=3D=
".."/>, opposed
+ to <mapping resource=3D"..."/> for each mapping.=
para>
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+ Documentation exporter (<hbm2do=
c>)
+
+
+ <hbm2doc>
+ generates html documentation a'la javadoc for the data=
base schema et.al.
+
+ ]]>
+
+
+
+ Query exporter (<query>)
+
+
+ <query>
+ is used to execute a HQL query statements and optional=
ly sends the output to a
+ file. It can be used for verifying the mappings and for basic data=
extraction.
+
+
+ [a HQL query string]
+
+]]>
+
+ Currently one session is opened and used for all queries and t=
he query is executed via
+ the list() method. In the future more options might become availab=
le, like performing
+ executeUpdate(), use named queries and etc.
+
+
+
+
+ Examples
+
+ The simplest usage of
+ <query>
+ will just execute the query without dumping to a fil=
e. This can be used to
+ verify that queries can actually be performed.
+
+
+
+ from java.lang.Object
+]]>
+
+ Multiple queries can be executed by nested
+ <hql>
+ elements. In this example we also let the output be =
dumped to
+ queryresult.txt.
+
+
+ Note:
+ Currently the dump is simply a call to toString on each e=
lement.
+
+
+
+
+
+ select c.name from Customer c where c.age > 42
+ from Cat
+]]>
+
+
+
+
+
+ Generic Hibernate metamodel exporter (<hbmtemplate>)
+
+ Generic exporter that can be controlled by a user provides a t=
emplate or class.
+
+ ]]>
+
+
+ Note:
+ Previous versions of the tools used Velocity. We are now usi=
ng Freemarker which
+ provides us much better exception and error handling.
+
+
+
+ Exporter via <hbmtemplate>
+
+ The following is an example of reverse engineering via
+ <jdbcconfiguration>
+ and usage of a custom Exporter via the
+ <hbmtemplate>
+ .
+
+
+ =
+ =
+ =
+
+
+ =
+
+ =
+
+]]>
+
+
+
+ Relevant Resources Links
+
+ Read more about V=
elocity and Freemarker to find out why using the last is better
+ or refer to Max Andersen discussion on the topic in "A story about FreeMarker and Velocity".
+
+
+
+
+
+
+
+ Using properties to configure Exporters
+
+ Exporters can be controlled by user properties. The user propert=
ies are specified via
+ <property>
+ or
+
+ <propertyset>
+
+ and each exporter will have access to them directly in t=
he templates and via
+ Exporter.setProperties().=
para>
+
+
+ <property> and
+ <propertyset>
+
+ The
+ <property>
+ allows you bind a string value to a key. The value wil=
l be available in the
+ templates via
+ $<key>
+ . The following example will assign the string value
+ "true"
+ to the variable
+ $descriptors
+ .
+
+ ]]>
+
+ Most times using
+
+ <property>
+
+ is enough for specifying the properties needed for the=
exporters. Still the ant
+ tools supports the notion of
+
+ <propertyset>
+
+ that is used for grouping a set of properties. More ab=
out the functionality of
+
+ <propertyset>
+
+ is explained in detail in the Ant
+ manual.
+
+
+
+ Getting access to user specific classes
+
+ If the templates need to access some user class it becomes pos=
sible by specifying a
+ "toolclass"
+ in the properties.
+
+
+]]>
+
+ Placing the above
+
+ <property>
+
+ tag in
+
+ <hibernatetool>
+
+ or inside any exporter will automatically create an in=
stance of
+ x.y.z.NameOfToolClass and i=
t will be available in the templates as
+ $sometool. This is useful t=
o delegate logic and code generation to java
+ code instead of placing such logic in the templates.
+
+
+ Example
+
+ Here is an example that uses
+ <hbmtemplate>
+ together with
+ <property>
+ which will be available to the templates/exporter. <=
/para>
+
+ Note:
+ This example actually simulates what <hbm2java> act=
ually does.
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+
+
+ =
+
+ Controlling reverse engineering
+
+ When using the
+ <jdbcconfiguration>, =
emphasis> the ant task will read the
+ database metadata and thus will perform a reverse engineering of the d=
atabase schema into a
+ normal Hibernate Configuration. It is from this object e.g.
+ <hbm2java>
+ can generate other artifacts such as
+ .java
+ ,
+ .hbm.xml
+ etc.
+
+ To govern this process Hibernate uses a reverse engineering strategy. A
+ reverse engineering strategy is mainly called to provide more java lik=
e names for tables, column
+ and foreignkeys into classes, properties and associations. It also use=
d to provide mappings from
+ SQL types to Hibernate types. T=
he strategy can be customized by a user. The
+ user can even provide its own custom reverse engineering strategy if t=
he provided strategy is
+ not enough, or simply just provide a small part of the strategy and de=
legate the rest to the
+ default strategy.
+
+ Thus, further in this chapter we will discuss how you can configur=
e the process of a reverse
+ engineering, what default reverse engineering strategy includes as well =
as some custom concepts.
+ =
+
+ Default reverse engineering strategy
+
+ The default strategy uses some rules for mapping JDBC artifact n=
ames to java artifact
+ names. It also provide basic typemappings from JDBC types to Hibernate
+ types. It is the default strategy that uses the packagename attribut=
e to convert a table name
+ to a fully qualified classname.
+
+
+
+ hibernate.reveng.xml file
+
+ To have fine control over the process a
+ hibernate.reveng.xml
+ file can be provided. In this file you can specify type =
mappings and table
+ filtering. This file can be created by hand (it's just basic XML) or=
you can use the
+ Hibernate plugins<=
/ulink> which have a
+ specialized editor.
+
+
+ Note:
+ Many databases are case-sensitive with their names and thus if=
you cannot make some
+ table match and you are sure it is not excluded by a <table-fil=
ter> then check
+ if the case matches; most databases stores table names in uppercas=
e.
+
+
+ Below you can see an example of a
+ reveng.xml. Fol=
lowing the example gives you more details
+ about the format.
+
+
+
+
+
+
+
+
+ =
+
+
+ =
+
+ =
+
+
+
+ =
+
+
+ =
+
+
+ =
+
+
+
=
+
+
+
+ seq_table
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]]>
+
+
+
+ Schema Selection (<schema-selection>)
+
+
+ <schema-selection>
+ is used to drive which schemas the reverse engineering=
will try and
+ process.
+
+ By default the reverse engineering will read all schemas and t=
hen use
+ <table-filter>
+ to decide which tables get reverse engineered and whic=
h do not; this makes it
+ easy to get started but can be inefficient on databases with many =
schemas.
+
+ With
+ <schema-selection>
+ it is thus possible to limit the actual processed sche=
mas and thus significantly
+ speed-up the reverse engineering.
+ <table-filter>
+ is still used to then decide which tables will be incl=
uded/excluded.
+
+
+ Note:
+ If no <schema-selection> is specified, the reverse
+ engineering works as if all schemas should be processed. This is=
equal to:
+ ]]>. Which in turn is equal to:
+ ]]>
+
+
+
+ Examples
+
+ The following will process all tables from
+ "MY_SCHEMA".
+
+
+ ]]>
+
+ It is possible to have multiple s=
chema-selection's to support
+ multi-schema reading or simply to limit the processing to very s=
pecific tables. The
+ following example processes all tables in
+ "MY_SCHEMA",
+ a specific
+ "CITY"
+ table plus all tables that starts with
+ "CODES_"
+ in
+ "COMMON_SCHEMA".
+
+
+
+
+]]>
+
+
+
+
+ Type mappings (<type-mapping>)
+
+ The
+ <type-mapping>
+ section specifies how the JDBC types found in the data=
base should be mapped to
+ Hibernate types. e.g.
+ java.sql.Types.VARCHAR with a length of 1 should be mapped to the
+ Hibernate type
+ yes_no or
+ java.sql.Types.NUMERIC<=
/emphasis> should generally just be
+ converted to the Hibernate type long.
+
+
+
+]]>
+
+ The number of attributes specified and the sequence of the
sql-type's
+ is important. Meaning that Hibernate=
property> will search for the most specific
+ first, and if no specific match is found it will seek from top to =
bottom when trying to
+ resolve a type mapping.
+
+
+ Example
+
+ The following is an example of a type-mapping which shows th=
e flexibility and the
+ importance of ordering of the type mappings.
+
+
+
+
+
+
+
+
+
+]]>
+
+ The following table shows how this affects an example table =
named
+ CUSTOMER:
+
+
+ sql-type examples
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Column
+
+ jdbc-type
+
+ length
+
+ precision
+
+ not-null
+
+ Resulting hibernate-type
+
+ Rationale
+
+
+
+
+
+ ID
+
+ INTEGER
+
+
+
+ 10
+
+ true
+
+ int
+
+ Nothing is defined for INTEGER. Falling back to def=
ault behavior.
+
+
+
+ NAME
+
+ VARCHAR
+
+ 30
+
+
+
+ false
+
+ your.package.TrimStringUserType
+
+ No type-mapping matches length=3D30 and not-null=3D=
false, but type-mapping
+ matches the 2 mappings which only specifies VARCHAR. The=
type-mapping that comes
+ first is chosen.
+
+
+
+ INITIAL
+
+ VARCHAR
+
+ 1
+
+
+
+ false
+
+ char
+
+ Even though there is a generic match for VARCHAR, t=
he more specific
+ type-mapping for VARCHAR with not-null=3D"false" is chos=
en. The first VARCHAR
+ sql-type matches in length but has no value for not-null=
and thus is not
+ considered.
+
+
+
+ CODE
+
+ VARCHAR
+
+ 1
+
+
+
+ true
+
+ java.lang.Character
+
+ The most specific VARCHAR with not-null=3D"true" is=
selected
+
+
+
+ SALARY
+
+ NUMERIC
+
+
+
+ 15
+
+ false
+
+ big_decimal
+
+ There is a precise match for NUMERIC with precision=
15
+
+
+
+ AGE
+
+ NUMERIC
+
+
+
+ 3
+
+ false
+
+ java.lang.Long
+
+ type-mapping for NUMERIC with not-null=3D"false"
+
+
+
+
+
+
+
+
+
+
+ Table filters (<table-filter>)
+
+ The
+ <table-filter>
+ let you specify matching rules for performing general =
filtering/setup for
+ tables, e.g. let you include or exclude specific tables based on t=
he schema or even a
+ specific prefix.
+
+ ]]>
+ =
+
+ Table-filter attributes
+ =
+
+ =
+ =
+ =
+
+ =
+
+ =
+ =
+
+
+ Attribute name
+ =
+ Definition
+ =
+ Default value
+
+
+ =
+
+
+ match-catalog
+ =
+ Pattern for matching catalog part of the tabl=
e
+ =
+ .*
+
+ =
+
+ match-schema
+ =
+ Pattern for matching schema part of the table=
+ =
+ .*
+
+ =
+
+ match-table
+ =
+ Pattern for matching table part of the table<=
/para>
+ =
+ .*
+
+ =
+
+ exclude
+ =
+ If true the table will not be part of the rev=
erse
+ engineering
+ =
+ false
+
+ =
+
+ package
+ =
+ The default package name to use for classes b=
ased on tables
+ matched by this table-filter
+ =
+ ""
+
+
+ =
+
+
+ =
+
+
+
+ Specific table configuration (<table>)
+
+
+ <table>
+ allows you to provide explicit configuration on how a =
table should be reverse
+ engineered. Amongst other things it allows controlling over the na=
ming of a class for the
+ table, specifying which identifier generator should be used for th=
e primary key etc.
+
+
+
+
+
+ ]]>
+ =
+
+ Table attributes
+ =
+
+ =
+ =
+ =
+
+ =
+
+ =
+ =
+
+
+ Attribute name
+ =
+ Definition
+ =
+ Attribute use
+
+
+ =
+
+
+ catalog
+ =
+ Catalog name for a table. It has to be specifie=
d if you are
+ reverse engineering multiple catalogs or if it is not equa=
l to
+ hiberante.default_catalog.
+ =
+ Optional
+
+ =
+
+ schema
+ =
+ Schema name for a table. It has to be specified=
if you are
+ reverse engineering multiple schemas or if it is not equal=
to
+ hiberante.default_schema.
+ =
+ Optional
+
+ =
+
+ name
+ =
+ Name for a table.
+ =
+ Required
+
+ =
+
+ class
+ =
+ The class name for a table. Default name is a c=
amelcase version
+ of the table name.
+ =
+ Optional
+
+ =
+
+ =
+
+
=
+
+
+ <primary-key>
+
+ A
+ <primary-key>
+ allows you to define a primary-key for tables that d=
on't have it
+ defined in the database, and probably more importantly it allows=
you to define which
+ identifier strategy should be used (even for already existing pr=
imary-key's).
+
+
+ parameter value
+
+
+ ]]>
+ =
+
+ Primary-key attributes
+ =
+
+ =
+ =
+ =
+
+ =
+
+ =
+ =
+
+
+ Attribute name
+ =
+ Definition
+ =
+ Attribute use
+
+
+ =
+
+
+ generator/class
+ =
+ Defines which identifier generator should be =
used.
+ The class name is any hibernate short hand name or fully=
qualified class name for an
+ identifier strategy.
+ =
+ Optional
+
+ =
+
+ generator/param
+ =
+ Allows to specify which parameter with a name=
and
+ value should be passed to the identifier generator.
+ =
+ Optional
+
+ =
+
+ key-column
+ =
+ Specifies which column(s ) the primary-key co=
nsists of. A
+ key-column is same as column, but does not have the excl=
ude property.
+ =
+ Optional
+
+ =
+
+ =
+
+
=
+
+
+
+
+ <column>
+
+ With a
+ <column>
+ it is possible to explicitly name the resulting prop=
erty for a column. It is
+ also possible to redefine what jdbc and/or Hibernate type a colu=
mn should be processed as
+ and finally it is possible to completely exclude a column from p=
rocessing.
+ =
+ ]]>
+
+
+ Column attributes
+ =
+
+ =
+ =
+ =
+
+ =
+
+ =
+ =
+
+
+ Attribute name
+ =
+ Definition
+ =
+ Attribute use
+
+
+ =
+
+
+ name
+ =
+ Column name
+ =
+ Required
+
+ =
+
+ jdbc-type
+ =
+ Which jdbc-type this column should be process=
ed as. A
+ value from java.sql.Types, either numerical (93) or the =
constant name
+ (TIMESTAMP).
+ =
+ Optional
+
+ =
+
+ type
+ =
+ Which hibernate-type to use for this specific=
column
+ =
+ Optional
+
+ =
+ =
+
+ property
+ =
+ What property name will be generated for this
+ column
+ =
+ Optional
+
+ =
+
+ exclude
+ =
+ Set to true if this column should be ignored<=
/para>
+ =
+ default: false
+
+ =
+
+ =
+
+
=
+ =
+
+
+
+ <foreign-key>
+
+ The
+ <foreign-key>
+ has two purposes. One for allowing to define foreign=
-keys in databases that
+ does not support them or does not have them defined in their sch=
ema. Secondly, to allow
+ defining the name of the resulting properties (many-to-one, one-=
to-one and one-to-many's).
+ =
+
+
+
+
+
+ ]]>
+
+ Foreign-key attributes
+ =
+
+ =
+ =
+ =
+
+ =
+
+ =
+ =
+
+
+ Attribute name
+ =
+ Definition
+ =
+ Attribute use
+
+
+ =
+
+
+ constraint-name
+ =
+ Name of the foreign key constraint. Important=
when
+ naming many-to-one, one-to-one and set. It is the constr=
aint-name that is used to link the
+ processed foreign-keys with the resulting property names=
.
+ =
+ Required
+
+ =
+
+ foreign-catalog
+ =
+ Name of the foreign table's catalog. (Only
+ relevant if you want to explicitly define a foreign key)=
.
+ =
+ Optional
+
+ =
+
+ foreign-schema
+ =
+ Name of the foreign table's schema. (Only rel=
evant
+ if you want to explicitly define a foreign key).<=
/entry>
+ =
+ Optional
+
+ =
+ =
+
+ foreign-table
+ =
+ Name of the foreign table. (Only relevant if =
you
+ want to explicitly define a foreign key).
+ =
+ Optional
+
+ =
+
+ column-ref
+ =
+ Defines that the foreign-key constraint betwe=
en a
+ local-column and foreign-column name. (Only relevant if =
you want to explicitly
+ define a foreign key).
+ =
+ Optional
+
+ =
+
+ many-to-one
+ =
+ Defines that a many-to-one should be created =
and the
+ property attribute specifies the name of the resulting p=
roperty. Exclude can be
+ used to explicitly define that it should be created or n=
ot.
+ =
+ Optional
+
+ =
+
+ set
+ =
+ Defines that a set should be created based on=
this foreign-key
+ and the property attribute specifies the name of the res=
ulting (set) property.
+ Exclude can be used to explicitly define that it should =
be created or not.
+ =
+ Optional
+
+ =
+
+ one-to-one
+ =
+ Defines that a one-to-one should be created a=
nd the
+ property attribute specifies the name of the resulting p=
roperty. Exclude can be
+ used to explicitly define that it should be created or n=
ot.
+ =
+ Optional
+
+ =
+
+ inverse-one-to-one
+ =
+ Defines that an inverse one-to-one should be =
created based on this foreign-key
+ and the property attribute specifies the name of the res=
ulting property.
+ Exclude can be used to explicitly define that it should =
be created or not.
+ =
+ Optional
+
+
+ =
+
+
=
+ =
+
+
+
+
+
+ Custom strategy
+
+ It is possible to implement a user strategy. Such strategy must =
implement
+ org.hibernate.cfg.reveng.ReverseEngine=
eringStrategy.
+ It is recommended that one uses the
+ DelegatingReverseEngineeringStrategy=
property> and provide a public constructor
+ which takes another ReverseEngineeringSt=
rategy as an argument. This will
+ allow you to only implement the relevant methods and provide a fallb=
ack strategy. Example of
+ custom delegating strategy which converts all column names that ends=
with
+ "PK"
+ into a property named
+ "id".
+
+
+
+
+
+
+ Custom Database Metadata
+
+ By default the reverse engineering is performed by reading using=
the JDBC database
+ metadata API. This is done via the class
+ org.hibernate.cfg.reveng.dialect.JDBCM=
etaDataDialect
+ which is an implementation of
+ org.hibernate.cfg.reveng.dialect.MetaD=
ataDialect.
+
+
+ The default implementation can be replaced with an alternative i=
mplementation by setting
+ the property
+ hibernatetool.metadatadialect
+ to a fully qualified classname for a class that implemen=
ts
+ JDBCMetaDataDialect.
+
+ This can be used to provide database specific optimized metadata=
reading. If you create an
+ optimized/better metadata reading for your database it will be a ver=
y welcome
+ contribution.
+
+
+
+ =
+
+ Controlling POJO code generation
+
+ When using
+ <hbm2java>
+ or the eclipse plugin to generate POJO java code you have =
the possibility to control
+ certain aspects of the code generation. This is primarily done with th=
e
+ <meta>
+ tag in the mapping files. The following section describes =
the possible
+ <meta>
+ tags and their use.
+
+
+ The <meta> attribute=
+
+ The
+ <meta>
+ tag is a simple way of annotating the
+ hbm.xml
+ with information, so tools have a natural place to store=
/read information that is
+ not directly related to the Hibernate core.
+
+ You can use the
+ <meta>
+ tag to e.g. tell
+ <hbm2java>
+ to only generate
+ "protected"
+ setters, have classes always implement a certain set of =
interfaces or even have
+ them extend a certain base class and even more.
+
+ The following example shows how to use various
+ <meta>
+ attributes and the resulting java code.
+
+
+
+ Javadoc for the Person class
+ @author Frodo
+
+ IAuditable
+
+ protected
+
+
+
+ The name of the person
+
+]]>
+
+ The above
+ hbm.xml
+ will produce something like the following (code shortene=
d for better
+ understanding). Notice the Javadoc comment and the protected set met=
hods:
+
+
+
+
+ Supported meta tags
+
+
+
+
+
+
+
+
+ Attribute
+
+ Description
+
+
+
+
+
+
+ class-description
+
+
+ inserted into the javadoc for classes
+
+
+
+
+ field-description
+
+
+ inserted into the javadoc for fields/properties
+
+
+
+
+ interface
+
+
+ If true, an interface is generated instead of an class.=
+
+
+
+
+ implements
+
+
+ interface the class should implement
+
+
+
+
+ extends
+
+
+ class that the current class should extend (ignored for=
subclasses)
+
+
+
+
+ generated-class
+
+
+ overrule the name of the actual class generated
+
+
+
+
+ scope-class
+
+
+ scope for class
+
+
+
+
+ scope-set
+
+
+ scope for setter method
+
+
+
+
+ scope-get
+
+
+ scope for getter method
+
+
+
+
+ scope-field
+
+
+ scope for actual field
+
+
+
+
+ default-value
+
+
+ default initialization value for a field
+
+
+
+
+ use-in-tostring
+
+
+ include this property in the toString()
+
+
+
+
+ use-in-equals
+
+
+ include this property in the equals() and
+ hashCode() method. If=
no use-in-equals is specified, no
+ equals/hashcode will be generated.
+
+
+
+
+ gen-property
+
+
+ property will not be generated if false (use with care)=
+
+
+
+
+ property-type
+
+
+ Overrides the default type of property. Use this with a=
ny tag's to specify the
+ concrete type instead of just Object.
+
+
+
+
+ class-code
+
+
+ Extra code that will inserted at the end of the class=
entry>
+
+
+
+
+ extra-import
+
+
+ Extra import that will inserted at the end of all other=
imports
+
+
+
+
+
+ Attributes declared via the
+ <meta>
+ tag are per default
+ "inherited"
+ inside an
+ hbm.xml
+ file.
+
+ What does that mean? It means that if you e.g want to have all y=
our classes implement
+ IAuditable then you just add =
an <meta
+ attribute=3D"implements">IAuditable</meta> in =
the top of the
+ hbm.xml
+ file, just after
+ <hibernate-mapping>. =
Now all classes defined
+ in that
+ hbm.xml
+ file will implement IAuditabl=
e!
+
+
+ Note:
+ This applies to all
+ <meta>-tags. Thus it ca=
n also e.g. be used to specify that
+ all fields should be declare protected, instead of the default pri=
vate. This is done by
+ adding <meta
+ attribute=3D"scope-field">protected</meta> at=
e.g. just under
+ the <class> tag and all=
fields of that class will be
+ protected.
+
+
+ To avoid having a
+ <meta>
+ tag inherited then you can simply specify inh=
erit =3D "false"
+ for the attribute, e.g. <meta attribute =3D "scope-cla=
ss" inherit =3D
+ "false">public abstract</meta> will restrict t=
he
+ "class-scope"
+ to the current class, not the subclasses.
+
+
+ Recommendations
+
+ The following are some good practices when using
+ <meta>
+ attributes.
+
+
+ Dangers of a class level use-in-=
string and use-in-equals meta
+ attributes when having bi-directional associations
+
+ If we have two entities with a bi-directional association be=
tween them and define at
+ class scope level the meta attributes:
+ use-in-string,
+
+ use-in-equals:
+
+
+
+ true
+ true
+ ...
+
+]]>
+
+ And for
+ Event.hbm
+ file:
+
+ =
+
+ true
+ true =
+
+
+
+
+
+
+
+
+ =
+
+]]>
+
+ Then
+ <hbm2java>
+ will assume you want to include all properties and c=
ollections in the
+ toString()/equals() met=
hods and this can result in infinite
+ recursive calls.
+
+ To remedy this you have to decide which side of the associat=
ion will include the other
+ part (if at all) in the toString()/e=
quals() methods. Therefore it is
+ not a good practice to put at class scope such
+ meta
+ attributes, unless you are defining a class without =
bi-directional
+ associations.
+
+ We recomend instead to add the
+ meta
+ attributes at the property level:
+
+ =
+ =
+
+ true
+
+
+
+
+ true
+ true =
+
+
+
+
+ =
+
+]]>
+
+ and now for Person:=
para>
+
+
+
+
+ Javadoc for the Person class
+ @author Frodo
+
+ IAuditable
+
+ protected
+ true =
+
+
+
+ The name of the person
+ true
+
+
+]]>
+
+
+
+ Be aware of putting at class scope level <meta>
+ attribute use-in-equals
+
+ For equal()/hashCode() method generation, you have to take into
+ account that the attributes that participate on such method defi=
nition, should take into
+ account only attributes with business meaning (the name, social =
security number, etc, but
+ no generated id's, for example).
+
+ This is important because Java's hashbased collections, such=
as
+ java.util.Set relies on=
equals() and
+ hashcode() to be correc=
t and not change for objects in the set;
+ this can be a problem if the id gets assigned for an object afte=
r you inserted it into a
+ set.
+
+ Therefore automatically configuration of the generation of
+ equals()/hashCode() met=
hods specifying at class scope level the
+ <meta>
+ attribute
+ use-in-equals
+ could be a dangerous decision that could produce non=
expected
+ side-effect.
+
+ Here you can get more in-depth
+ explanation on the subject of equals=
() and
+ hashcode().
+
+
+
+
+ Advanced <meta> attribute examples
+
+ This section shows an example for using meta attributes (inclu=
ding userspecific
+ attributes) together with the code generation features in Hibernate
+ Tools.
+
+ The usecase being implemented is to automatically insert some =
pre- and post-conditions
+ into the getter and setters of the generated POJO.
+
+
+ Generate pre/post-conditions for methods
+
+ With a <meta attribute=3D"class-code">, you can add
+ additional methods on a given class, nevertheless such
+ <meta>
+ attribute can not be used at a property scope level =
and Hibernate
+ Tools does not provide such
+ <meta>
+ attributes.
+
+ A possible solution for this is to modify the freemarker tem=
plates responsible for
+ generating the POJO's. If you look inside
+ hibernate-tools.jar, =
emphasis> you can find the template:
+ pojo/PojoPropertyAccessor.ftl
+
+
+ This file is as the name indicates used to generate property=
accessors for
+ pojo's.
+
+ Extract the
+ PojoPropertyAccessor.ftl
+ into a local folder i.e.
+ ${hbm.template.path}, <=
/emphasis> respecting the whole path, for
+ example:
+ ${hbm.template.path}/pojo/PojoProp=
ertyAccessor.ftl
+
+
+ The contents of the file is something like this:
+
+
+ ${pojo.getPropertyGetModifiers(property)} =
+ ${pojo.getJavaTypeName(property, jdk5)} =
+ ${pojo.getGetterSignature(property)}() {
+ return this.${property.name};
+ }
+ =
+ ${pojo.getPropertySetModifiers(property)} void set${pojo.getPropertyNa=
me(property)}
+ (${pojo.getJavaTypeName(property, jdk5)} ${property.name}) =
+ {
+ this.${property.name} =3D ${property.name};
+ }
+#foreach>]]>
+
+ We can add conditionally pre/post-conditions on our set method
+ generation just adding a little Freemarker syntax to the above s=
ource code:
+
+
+ ${pojo.getPropertyGetModifiers(property)} =
+ ${pojo.getJavaTypeName(property, jdk5)} =
+ ${pojo.getGetterSignature(property)}()
+ {
+ return this.${property.name};
+ }
+ =
+ ${pojo.getPropertySetModifiers(property)} void set${pojo.getPropertyNa=
me(property)}
+ (${pojo.getJavaTypeName(property, jdk5)} ${property.name}) =
+ {
+ <#if pojo.hasMetaAttribute(property, "pre-cond")> =
+ ${c2j.getMetaAsString(property, "pre-cond","\n")} =
+ #if> =
+ this.${property.name} =3D ${property.name};
+ <#if pojo.hasMetaAttribute(property, "post-cond")> =
+ ${c2j.getMetaAsString(property, "post-cond","\n")} =
+ #if> =
+}
+#foreach>]]>
+
+
+ Now if in any
+ .hbm.xml
+ file we define the
+ <meta>
+ attributes: pre-cond or post-cond, their
+ contents will be generated into the body of the relevant set
+ method.
+
+ As an example let us add a pre-condition for property name
+ preventing no Person can =
have an empty name. Hence we have to modify
+ the
+ Person.hbm.xml
+ file like this:
+
+
+
+ =
+
+
+
+
+ if ((firstName !=3D null) && (firstName.length() =3D=3D 0) )=
{
+ throw new IllegalArgumentException("firstName can not be an empty =
String");
+ }
+
+
+
+]]>
+
+
+ Note:
+ I) To escape the & symbol we put &. You can use
+ <![CDATA[]]> instead.
+ II) Note that we are referring to "firstName" directly and=
this is the parameter
+ name not the actual field name. If you want to refer the field=
you have to use
+ "this.firstName" instead.
+
+
+ Finally we have to generate the
+ Person.java
+ class, for this we can use both Eclipse and Ant as l=
ong as you remember to set
+ or fill in the templatepath setting. For Ant we configure
+ <hibernatetool>
+ task via the templatepath=
attribute as in:
+
+
+
+
+
+
+ =
+
+
+
+
+
+
+
+ ]]>
+
+ Invoking the target
+ <hbm2java>
+ will generate on the
+ ${hbm2java.dest.dir}
+ the file
+ Person.java
+ :
+
+
+
+ In conclusion, this document is intended to introduce you to=
Hibernate plugin specific
+ features related to tools bath for the Eclipse and Ant tasks.
+
+ In the Eclipse Plugins chap=
ter you've learnt
+ about a set of wizards for creating Mapping files, Configuration=
file, Console
+ Configuration, got familiar with Mapping and Configuration files=
editors, tooling for
+ organizing and controlling Reverse Engineering, Hibernate Consol=
e and Mapping diagram as
+ well.
+
+ The rest chapters have shown the aspects of using the Hibernate
+ Tools via Ant tasks.
+
+ Please, visit JBoss
+ Tools Users Forum to leave questions or/and suggestion=
s on the topic. Your
+ feedback is always appreciated.
+
+
+
+
+
+
+ =
+ =
+ =
+
--===============6424831744693035957==--