{"id":6,"date":"2005-12-21T10:40:00","date_gmt":"2005-12-21T10:40:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=6"},"modified":"2005-12-21T10:40:00","modified_gmt":"2005-12-21T10:40:00","slug":"spring-hibernate-und-hsqldb","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2005\/12\/spring-hibernate-und-hsqldb\/","title":{"rendered":"Spring, Hibernate und HSQLDB"},"content":{"rendered":"<p>Nach dem das <a href=\"http:\/\/javainsel.blogspot.com\/2005\/12\/mit-spring-und-dem-jdbctemplate-auf.html\"> erste Beispiel<\/a> das Zusammenspiel von Spring und HSQLDB zeigte, soll das zweite Beispiel statt dem JdbcTemplate das HibernateTemplate nutzen, damit Hibernate die OR-Abbildung \u00fcbernimmt. Zur Vorbereitung (und Erweiterung) des ersten Beispiels wird zun\u00e4chst <i>log4j.properties<\/i> um eine Zeile erweitert:<\/p>\n<pre>log4j.rootCategory=ERROR, A1<br \/>log4j.logger.net.sf.ehcache=ERROR, A1<br \/><br \/>log4j.appender.A1=org.apache.log4j.ConsoleAppender<br \/>log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br \/>log4j.appender.A1.layout.ConversionPattern=%m%n<\/pre>\n<p><\/p>\n<p>F\u00fcr Hibernate sind ebenso weitere Jar-Dateien n\u00f6tig, so dass sich insgesamt<br \/>im Pfad befinden m\u00fcssen:<\/p>\n<ul> <\/p>\n<li><i>hsqldb.jar<\/i><\/li>\n<p> <\/p>\n<li><i>log4j-*.jar<\/i><\/li>\n<p> <\/p>\n<li><i>spring.jar<\/i><\/li>\n<p> <\/p>\n<li><i>common-logging.jar<\/i><\/li>\n<p> <\/p>\n<li><i>hibernate3.jar<\/i><\/li>\n<p> <\/p>\n<li><i>dom4j-*.jar<\/i><\/li>\n<p> <\/p>\n<li><i>jta.jar<\/i><\/li>\n<p> <\/p>\n<li><i>common-collections-*.jar<\/i><\/li>\n<p> <\/p>\n<li><i>ehcache-*.jar<\/i><\/li>\n<p> <\/p>\n<li><i>cglib-*.jar<\/i><\/li>\n<p> <\/p>\n<li><i>asm.jar<\/i><\/li>\n<p> <\/p>\n<li><i>antlr-*.jar<\/i><\/li>\n<p><\/ul>\n<p>Als erstes zeigt die DAO-Implementierung die Verwendung von HibernateTemplate.<\/p>\n<pre>package com.javatutor.dao.hibernate;<br \/><br \/>import java.util.Collection;<br \/><br \/>import org.springframework.orm.hibernate3.HibernateTemplate;<br \/><br \/>import com.javatutor.dao.CustomerDao;<br \/>import com.javatutor.domain.Customer;<br \/><br \/>public class CustomerDaoHibernateImpl extends HibernateTemplate implements CustomerDao<br \/>{<br \/> @SuppressWarnings(\"unchecked\")<br \/> public Collection&lt;Customer&gt; getCustomers()<br \/> {<br \/>  return loadAll( Customer.class );<br \/> }<br \/><br \/> public Customer findCustomerById( int id )<br \/> {<br \/>  return (Customer) load( Customer.class, id );<br \/> }<br \/><br \/> public void save( Customer customer )<br \/> {<br \/>  saveOrUpdate( customer );<br \/> }<br \/>}<\/pre>\n<p>Zum Mappen der POJOs auf die Datenbank ist eine Mapping-Datei n\u00f6tig, es sei denn, man arbeitet mit Java 5 Annotationen. In den Klassenpfad kommt die Datei <i>Customer.hbm.xml<\/i>.<\/p>\n<pre>&lt;?xml version=\"1.0\"?&gt;<br \/><br \/>&lt;!DOCTYPE hibernate-mapping PUBLIC<br \/> \"-\/\/Hibernate\/Hibernate Mapping DTD 3.0\/\/EN\"<br \/> \"http:\/\/hibernate.sourceforge.net\/hibernate-mapping-3.0.dtd\"&gt;<br \/><br \/>&lt;hibernate-mapping package=\"com.javatutor.domain\"&gt;<br \/><br \/>&lt;class name=\"Customer\" table=\"Customers\" lazy=\"false\"&gt;<br \/><br \/> &lt;id name=\"id\" column=\"Id\"&gt;<br \/>  &lt;generator class=\"native\" \/&gt;<br \/> &lt;\/id&gt;<br \/><br \/> &lt;property name=\"name\" column=\"Name\" \/&gt;<br \/><br \/>&lt;\/class&gt;<\/pre>\n<p><\/p>\n<pre>&lt;\/hibernate-mapping&gt;<\/pre>\n<p>In der Spring XML-Datei m\u00fcssen wir den CustomerDaoHibernateImpl anmelden und<br \/>mit einer SessionFactory versorgen.<\/p>\n<pre>&lt;bean id=\"CustomerDaoHibernate\" class=\"com.javatutor.dao.hibernate.CustomerDaoHibernateImpl\"&gt;<br \/>&lt;property name=\"sessionFactory\"&gt;<br \/> &lt;ref local=\"SessionFactory\" \/&gt;<br \/>&lt;\/property&gt;<br \/>&lt;\/bean&gt;<\/pre>\n<p>Die SessionFactory ist f\u00fcr Hibernate n\u00f6tig und enth\u00e4lt 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.<\/p>\n<pre>&lt;bean id=\"DataSource\" class=\"org.springframework.jdbc.datasource.DriverManagerDataSource\"&gt;<br \/>&lt;property name=\"driverClassName\"&gt;<br \/> &lt;value&gt;org.hsqldb.jdbcDriver&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"url\"&gt;<br \/> &lt;value&gt;jdbc:hsqldb:file:\/c\/:Customers;shutdown=true&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"username\"&gt;<br \/> &lt;value&gt;sa&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"password\"&gt;<br \/> &lt;value&gt;&lt;\/value&gt;<br \/>&lt;\/property&gt;<br \/>&lt;\/bean&gt;<\/pre>\n<p>Es ist sehr wichtig, den Parameter ;shutdown=true an die Verbindungs-URL zu setzen. Die LocalSessionFactoryBean ist der Produzent f\u00fcr unsere SessionFactory:<\/p>\n<pre>&lt;bean id=\"SessionFactory\" class=\"org.springframework.orm.hibernate3.LocalSessionFactoryBean\"&gt;<br \/>&lt;property name=\"dataSource\"&gt;<br \/> &lt;ref local=\"DataSource\" \/&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"mappingResources\"&gt;<br \/> &lt;list&gt;<br \/>  &lt;value&gt;Customer.hbm.xml&lt;\/value&gt;<br \/> &lt;\/list&gt;<br \/>&lt;\/property&gt;<br \/>&lt;property name=\"hibernateProperties\"&gt;<br \/> &lt;props&gt;<br \/>  &lt;prop key=\"hibernate.dialect\"&gt;<br \/>   org.hibernate.dialect.HSQLDialect<br \/>  &lt;\/prop&gt;<br \/> &lt;!-- &lt;prop key=\"hibernate.show_sql\"&gt;true&lt;\/prop&gt;--&gt;<br \/>  &lt;prop key=\"hibernate.hbm2ddl.auto\"&gt;create&lt;\/prop&gt;<br \/> &lt;\/props&gt;<br \/>&lt;\/property&gt;<br \/>&lt;\/bean&gt;<\/pre>\n<p>Mit dem hibernate.hbm2ddl.auto ist dann auch in der Applikation das CREATE TABLE unn\u00f6tig. Und das war&#8217;s dann auch schon.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 \u00fcbernimmt. Zur Vorbereitung (und Erweiterung) des ersten Beispiels wird zun\u00e4chst 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\u00fcr Hibernate sind ebenso weitere Jar-Dateien n\u00f6tig, so dass sich insgesamtim [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[3],"tags":[],"class_list":["post-6","post","type-post","status-publish","format-standard","hentry","category-spring"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=6"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/6\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=6"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=6"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}