We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website. Actually, you only need the
hsqldb.jar from this download. Place this file in the
lib/ directory of the development folder.
Create a directory called
data in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running
java -classpath ../lib/hsqldb.jar org.hsqldb.Server in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press
CTRL + C in the window), delete all files in the
data/ directory, and start HSQL DB again.
Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software.
For Hibernate's configuration, we can use a simple
hibernate.properties file, a slightly more sophisticated
hibernate.cfg.xml file, or even complete programmatic setup. Most users prefer the XML configuration file:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
<!-- Database connection settings -->
<!-- JDBC connection pool (use the built-in) -->
<!-- SQL dialect -->
<!-- Enable Hibernate's automatic session context management -->
<!-- Disable the second-level cache -->
<!-- Echo all executed SQL to stdout -->
<!-- Drop and re-create the database schema on startup -->
Note that this XML configuration uses a different DTD. We configure Hibernate's
SessionFactory - a global factory responsible for a particular database. If you have several databases, use several
<session-factory> configurations, usually in several configuration files (for easier startup).
The first four
property elements contain the necessary configuration for the JDBC connection. The dialect
property element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The
hbm2ddl.auto option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the
SchemaExport Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration.
Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called
hibernate.cfg.xml in the root of the classpath, on startup.