- Back to Home »
- Spring »
- Spring & Hibernate Integration
● SessionFactory object is Dependency-Injected
● HibernateTemplate class is provided
Setting up Hibernate SesssionFactory
DataSource Setup Through DI
<beans>
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroymethod="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.HSQLDialect
</value>
</property>
</bean>
</beans>
HibernateTemplate
● Helper class that simplifies Hibernate data access code
● Automatically converts HibernateExceptions into DataAccessExceptions, following the org.springframework.dao exception hierarchy
● The central method is execute, supporting Hibernate access code implementing the HibernateCallback interface.
● It provides Hibernate Session handling such that neither the HibernateCallback implementation nor the calling code needs to explicitly care about retrieving/closing Hibernate Sessions, or handling Session lifecycle exceptions.
● For typical single step actions, there are various convenience methods (find, load, saveOrUpdate, delete).
HibernateTemplate Example
SessionFactory sessionFactory= HibernateFactory.getSessionFactory();
HibernateTemplate template= new HibernateTemplate(sessionFactory);
Event event1 = new Event("Event 1");
Event event2 = new Event("Event 2");
Event event3 = new Event("Event 3");
template.save(event1);
template.save(event2);
template.save(event3);
template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws
HibernateException, SQLException {
Query query = session.createQuery("from Event");
query.setMaxResults(2);
List events = query.list();
for (Iterator it = events.iterator(); it.hasNext();) {
Event event = (Event) it.next();
System.out.println(event.getName());
event.setDuration(60);
}
return null;
}
});
What Supporting Services Do We Need?
● Must solve the problem of data access exceptions to have independent DAO interfaces
– Can't throw SQLException or JDOException
– Catch/warp leads to huge redundancy
● Ex) Catch SQLException throw MyFunnyDaoException
– Need meaningful exceptions
● Not just one SQLException
● Need to be able to catch at different levels
– Data access exceptions should be unchecked
● HibernateTemplate class is provided
Setting up Hibernate SesssionFactory
DataSource Setup Through DI
<beans>
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroymethod="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.HSQLDialect
</value>
</property>
</bean>
</beans>
HibernateTemplate
● Helper class that simplifies Hibernate data access code
● Automatically converts HibernateExceptions into DataAccessExceptions, following the org.springframework.dao exception hierarchy
● The central method is execute, supporting Hibernate access code implementing the HibernateCallback interface.
● It provides Hibernate Session handling such that neither the HibernateCallback implementation nor the calling code needs to explicitly care about retrieving/closing Hibernate Sessions, or handling Session lifecycle exceptions.
● For typical single step actions, there are various convenience methods (find, load, saveOrUpdate, delete).
HibernateTemplate Example
SessionFactory sessionFactory= HibernateFactory.getSessionFactory();
HibernateTemplate template= new HibernateTemplate(sessionFactory);
Event event1 = new Event("Event 1");
Event event2 = new Event("Event 2");
Event event3 = new Event("Event 3");
template.save(event1);
template.save(event2);
template.save(event3);
template.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws
HibernateException, SQLException {
Query query = session.createQuery("from Event");
query.setMaxResults(2);
List events = query.list();
for (Iterator it = events.iterator(); it.hasNext();) {
Event event = (Event) it.next();
System.out.println(event.getName());
event.setDuration(60);
}
return null;
}
});
What Supporting Services Do We Need?
● Must solve the problem of data access exceptions to have independent DAO interfaces
– Can't throw SQLException or JDOException
– Catch/warp leads to huge redundancy
● Ex) Catch SQLException throw MyFunnyDaoException
– Need meaningful exceptions
● Not just one SQLException
● Need to be able to catch at different levels
– Data access exceptions should be unchecked