'''Option 1''' Example of a Dao or Service object: {{{ @Repository @Transactional public class ErikExampleDao { @Autowired private SessionFactory sessionFactory; void saveErikExampleDomainClass(ErikExampleDomain erikExampleDomain){ sessionFactory.getCurrentSession().save(erikExampleDomain) }}} This configuaration needed: {{{ }}} '''Option 2''' {{{ public class ExampleDao extends HibernateDaoSupport { void saveErikExampleDomain(ErikExampleDomain erikExampleDomain ) { this.getHibernateTemplate().save(erikExampleDomain ); } }}} This configuaration needed: {{{ }}} '''Chosen Option 1'''. This option is chosen because (1) one line less of configuration (2) It is working directly with the sessionFactory instead of a Facade like HibernateTemplate. Working with a template can have advantages. However in case of Hibernate, Spring has little to add because Hibernate is a very mature package. (3) SessionFactory is directly available. This might be necessary in cases of more advanced use of Hibernate. In option 1 you see as well the annotations @Transactional and @Repository. @Transaction means that every method in this Dao is considered as a transaction. @Repository has to do with the way Spring handles exceptions.