Hibernate txProxyTemplate и объявление транзакций - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть бин, который расширяет этот txProxyTemplate, и внутри него этот метод orderUpdateOverseer вызывает getHibernateTemplate (). SaveOrUpdate (someObject);

private void orderUpdateOverseer(OrderReturnState orderReturnState) throws ReturnsOrderUpdateException

Я заметил, что hibernate сбрасывает обновления базы данных, только когда я полностью выхожу из bean-компонента, который расширяет txProxyTemplate, вместо того, чтобы делать это при выходе из метода orderUpdateOverseer, который я объявил в новой транзакции. Это почему? Что я делаю не так?

<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="hibernateTransactionMgr" />
    <property name="transactionAttributes">
        <props>
            <prop key="getAmos*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="orderUpdateOverseer">PROPAGATION_REQUIRES_NEW</prop>
            <prop key="recordProcessOverseer">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="save*">PROPAGATION_REQUIRED</prop>
            <prop key="update*">PROPAGATION_REQUIRED</prop>
            <prop key="store*">PROPAGATION_REQUIRED</prop>
            <prop key="merge*">PROPAGATION_REQUIRED</prop>
            <prop key="split*">PROPAGATION_REQUIRED</prop>
            <prop key="receive*">PROPAGATION_REQUIRED</prop>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

1 Ответ

3 голосов
/ 18 апреля 2011

Аспекты транзакции Spring основаны на прокси , поэтому они не применяются к private методам, а также к вызовам метода из другого метода того же объекта.

Если вам нужно вызвать метод того же объекта внутри новой транзакции, самый простой способ сделать это - использовать программное управление транзакциями (TransactionTemplate) .

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