sessionFactory error

当自定义的Dao实现了org.springframework.orm.hibernate3.support.HibernateDaoSupport 时,若Dao是以注解的形式提供bean,则要以注解的形式注入SessionFactory,而HibernateDaoSupport 中相关的set方法都是final 的,即不能覆盖:

public final void setSessionFactory(SessionFactory sessionFactory) {
  if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
   this.hibernateTemplate = createHibernateTemplate(sessionFactory);
  }
 }

public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
  this.hibernateTemplate = hibernateTemplate;
 }

解决方法:

@Transactional
@Repository("baseLocationDao")
public class BaseLocationDaoImpl extends HibernateDaoSupport implements LocationDao{
 private Logger logger = LoggerFactory.getLogger(BaseLocationDaoImpl.class);
 
 @Resource
 public void setMySessionFactory(SessionFactory sessionFactory){
  super.setSessionFactory(sessionFactory);
 }
}

而SessionFactory的实现类也应该配置成注解形式的:
 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="packagesToScan" value="com.pbn.oss.location"></property>
  <property name="schemaUpdate" value="true" />
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
    <prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
   </props>
  </property>
 </bean>

猜你喜欢

转载自ssydxa219.iteye.com/blog/1780231
今日推荐