Как получить доступ к Hibernate сессии через AnnotationSessionFactoryBean? - PullRequest
2 голосов
/ 12 сентября 2011

Я хочу интегрировать спящий с весной. В документации по Spring 3 говорится, что вы можете получить доступ к сеансу с помощью функции getCurrentSession () org.hiberate.SessionFactory, и это должно быть предпочтительнее подхода hibernateDaoSupport.

Но я хочу знать, как мы можем получить экземпляр org.hiberate.SessionFactory, если мы используем AnnotationSessionFactoryBean? Я сделал следующее объявление bean в applicationContext.xml:

       <bean id="annotationSessionFactoryBean" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
              <property name="dataSource" ref="dataSource"/>
              <property name="packagesToScan" value="com.mydomain"/>
              <property name="hibernateProperties">
                  <props>
                    <prop key="hibernate.connection.pool_size">10</prop>
                    <prop key="hibernate.connection.show_sql">true</prop>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                  </props>
            </property>     
    </bean>

DAO, использующий сеанс:

    <bean id="hibernateUserProfileDAO" class="com.springheatmvn.Dao.impl.hibernate.HibernateUserProfileDAO">
        <property name="annotationSessionFactoryBean" ref="annotationSessionFactoryBean"/>
    </bean>

В моем hibernateUserProfileDAO я хотел бы получить текущий сеанс, подобный этому

    public class HibernateUserProfileDAO implements UserProfileDAO {
      private AnnotationSessionFactoryBean annotationSessionFactoryBean;

      public UserProfile getUserProfile() {
    Session session = annotationSessionFactoryBean.getCurrentSession();
      ....
      }

Но я вижу, что в AnnotationFactoryBean нет открытого метода getCurrentSession (). Я нашел только защищенный метод getAnnotationSession (), но он также находится в классе фабрики абстрактных сессий.

Может кто-нибудь сказать мне, где я иду не так?

1 Ответ

5 голосов
/ 12 сентября 2011

AnnotationSessionFactoryBean - это фабрика, которая производит SessionFactory автоматически (внутренняя пружина обрабатывает пружину), поэтому вам необходимо использовать ее следующим образом:

<bean id="sf" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">        
    ...
</bean>    

<bean id="hibernateUserProfileDAO" class="com.springheatmvn.Dao.impl.hibernate.HibernateUserProfileDAO">
     <property name="sf" ref="sf"/>
</bean>

.

public class HibernateUserProfileDAO implements UserProfileDAO {
    private SessionFactory sf;    
    ...
}

Затем вы получите Session, позвонив sf.getCurrentSession().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...