что такое использование Hibernate Interceptor и proxyTargetClass - PullRequest
0 голосов
/ 07 сентября 2011

Я новичок в спящем и весеннем и пытаюсь научиться использовать спящий перехватчик.Я просмотрел документацию сообщества, в которой говорится, что ....

Этот перехватчик связывает новый сеанс Hibernate с потоком перед вызовом метода, закрывая и удаляя его впоследствии в случае какого-либо результата метода.Если уже существует предварительно связанный сеанс (например, из HibernateTransactionManager или из окружающего метода, перехваченного Hibernate), перехватчик просто участвует в нем.

Но я не могу понять, когда мы используемэто и почему мы используем это?

когда для создания taskDao вот так?

<bean name="abstractDao" abstract="true">
        <property name="hibernateTemplate" ref="taskHibernateTemplate"/>
    </bean>
<bean id="taskHibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
        <property name="sessionFactory" ref="taskSessionFactory"/>
    </bean>

<bean id="taskDaoTarget" class="com.xyz.abc.backgroundtask.impl.TaskDao" parent="abstractDao"/>

<bean id="taskDao" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyTargetClass" value="true"/>
    <property name="interceptorNames">
        <list>
            <value>taskHibernateInterceptor</value>
            <value>taskDaoTarget</value>
        </list>
    </property>
</bean>

и когда для создания taskDao вот так?

<bean name="abstractDao" abstract="true">
        <property name="hibernateTemplate" ref="taskHibernateTemplate"/>
    </bean>

<bean id="taskDao" class="com.xyz.zbc.backgroundtask.impl.TaskDao" parent="abstractDao"/>

1 Ответ

3 голосов
/ 07 сентября 2011

Нужно ли использовать Hibernate Interceptor?Потому что я бы посоветовал вам использовать Spring (на основе аннотаций) декларативное управление транзакциями .Это общая абстракция для многих поддерживаемых базовых технологий.

По сути, вы определяете компонент TransactionManager, в случае Hibernate с JPA:

<bean id="transactionManager"
    class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="myEmf"/>
</bean>

без JPA:

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

В обоих случаях активируйте транзакции на основе аннотаций:

<tx:annotation-driven />

Или, если вы не используете интерфейсы:

<tx:annotation-driven proxy-target-class="true" />

Теперь комментируйте методы уровня обслуживанияили классы с @Transactional, и вы автоматически получите сеансы, созданные в области ваших методов обслуживания.

Я бы посоветовал вам не использовать HibernateInterceptor и HibernateTemplate, они оба просто не современный способ делать вещи больше.

Чтение:

И посмотреть, как раньше делаливесной:

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