One to Many Hibernate Annotation Configuration

David Winterfeldt

2008


A simple example using a one-to-many relationship in Hibernate with an Annotation configuration to find, save, and update a record. A Person has a one-to-many relationship with Address.

1. Spring Configuration

The jdbc:embedded-database element is used to initialize the test HSQLDB database and the LocalSessionFactoryBean is used to configure Hibernate.

shared-context.xml
                
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/jdbc 
                           http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

    <jdbc:embedded-database id="dataSource" type="HSQL">
        <jdbc:script location="classpath:/schema.sql" />
    </jdbc:embedded-database>    

    <bean id="sessionFactory" 
          class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
          p:dataSource-ref="dataSource">
        <property name="mappingLocations">
            <list>
            	<value>classpath:org/springbyexample/orm/hibernate3/bean/Address.hbm.xml</value>
                <value>classpath:org/springbyexample/orm/hibernate3/bean/Person.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <value>
                hibernate.format_sql=true
                hibernate.dialect=org.hibernate.dialect.HSQLDialect
            </value>
        </property>
    </bean>

</beans>
                
            

The annotatedClasses property is used to set a list of Hibernate annotated classes. The Person DAO is configured using Hibernate's session factory.

PersonAnnotationDaoTest-context.xml
                
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
	   					   http://www.springframework.org/schema/beans/spring-beans.xsd">

    <import resource="classpath:org/springbyexample/orm/hibernate3/shared-context.xml"/>
    
    <!-- Override xml session factory imported from shared-context.xml -->
    <bean id="sessionFactory" 
          class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
          p:dataSource-ref="dataSource">
        <property name="annotatedClasses">
        	<list>
        		<value>org.springbyexample.orm.hibernate3.annotation.bean.Person</value>
        		<value>org.springbyexample.orm.hibernate3.annotation.bean.Address</value>
        	</list>
        </property>
        <property name="hibernateProperties">
            <value>
                hibernate.format_sql=true
                hibernate.dialect=org.hibernate.dialect.HSQLDialect
            </value>
        </property>
    </bean>
    
    <bean id="personDao" 
          class="org.springbyexample.orm.hibernate3.annotation.dao.PersonDaoImpl"
          p:sessionFactory-ref="sessionFactory" />

</beans>