Spring, Hibernate und HSQLDB
Nach dem das erste Beispiel das Zusammenspiel von Spring und HSQLDB zeigte, soll das zweite Beispiel statt dem JdbcTemplate das HibernateTemplate nutzen, damit Hibernate die OR-Abbildung übernimmt. Zur Vorbereitung (und Erweiterung) des ersten Beispiels wird zunächst log4j.properties um eine Zeile erweitert:
log4j.rootCategory=ERROR, A1log4j.logger.net.sf.ehcache=ERROR, A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%m%n
Für Hibernate sind ebenso weitere Jar-Dateien nötig, so dass sich insgesamt im Pfad befinden müssen:
- hsqldb.jar
- log4j-*.jar
- spring.jar
- common-logging.jar
- hibernate3.jar
- dom4j-*.jar
- jta.jar
- common-collections-*.jar
- ehcache-*.jar
- cglib-*.jar
- asm.jar
- antlr-*.jar
Als erstes zeigt die DAO-Implementierung die Verwendung von HibernateTemplate.
package com.javatutor.dao.hibernate;import java.util.Collection;import org.springframework.orm.hibernate3.HibernateTemplate;import com.javatutor.dao.CustomerDao;import com.javatutor.domain.Customer;public class CustomerDaoHibernateImpl extends HibernateTemplate implements CustomerDao{ @SuppressWarnings("unchecked") public Collection getCustomers() { return loadAll( Customer.class ); } public Customer findCustomerById( int id ) { return (Customer) load( Customer.class, id ); } public void save( Customer customer ) { saveOrUpdate( customer ); }}
Zum Mappen der POJOs auf die Datenbank ist eine Mapping-Datei nötig, es sei denn, man arbeitet mit Java 5 Annotationen. In den Klassenpfad kommt die Datei Customer.hbm.xml.
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
In der Spring XML-Datei müssen wir den CustomerDaoHibernateImpl anmelden und
mit einer SessionFactory versorgen.
Die SessionFactory ist für Hibernate nötig und enthält den Hinweis auf die OR-Mappings und die DataSource. Die DataSource haben wir schon verwendet, doch damit alles persistent bleibt, soll HSQLDB diesmal ins Dateisystem schreiben.
org.hsqldb.jdbcDriver jdbc:hsqldb:file:/c/:Customers;shutdown=true sa
Es ist sehr wichtig, den Parameter ;shutdown=true an die Verbindungs-URL zu setzen. Die LocalSessionFactoryBean ist der Produzent für unsere SessionFactory:
Customer.hbm.xml org.hibernate.dialect.HSQLDialect create
Mit dem hibernate.hbm2ddl.auto ist dann auch in der Applikation das CREATE TABLE unnötig. Und das war’s dann auch schon.