2013-06-24 5 views
0

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

Я использую Spring MVC

Часть из DAO, что делает сохранить

public final T saveOrUpdate(final T instance) { 
    context.currentSession().saveOrUpdate(instance); 
    context.currentSession().flush(); //TODO should not have to do this 
    return instance; 
} 

часть файла web.xml, который позволяет выполнять запросы с точки зрения с помощью AJAX

<filter> 
    <filter-name>Open Session In View Filter</filter-name> 
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>Open Session In View Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

часть конфигурации пружины для управления сделками ление

<context:property-placeholder location="classpath:environment.properties" /> 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${hibernate.connection.driver_class}" /> 
    <property name="jdbcUrl" value="${hibernate.connection.url}" /> 
    <property name="user" value="${hibernate.connection.username}" /> 
    <property name="password" value="${hibernate.connection.password}" /> 
    <property name="initialPoolSize" value="5" /> 
    <property name="minPoolSize" value="5" /> 
    <property name="maxPoolSize" value="25" /> 
    <property name="acquireIncrement" value="5" /> 
    <property name="maxIdleTime" value="1800" /> 
    <property name="numHelperThreads" value="5" /> 
</bean> 


<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="entityInterceptor"> 
    <bean class="org.mycompany.persistence.AuditTrailInterceptor"/> 
    </property> 
    <property name="hibernateProperties"> 
    <props> 
     <!-- Hibernate Tweak to enhance performance --> 
     <prop key="hibernate.order_inserts">true</prop> 
     <!-- Hibernate Tweak to enhance performance --> 
     <prop key="hibernate.order_updates">true</prop> 

     <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
     <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop> 
     <prop key="hibernate.show_sql">true</prop> 
    </props> 
    </property> 
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 

    <!-- Enable mapping of annotated hibernate classes --> 
    <property name="packagesToScan" value="org.mycompany" /> 

</bean> 

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

<tx:annotation-driven transaction-manager="transactionManager"/> 

Пример службы метод

@Service 
@Transactional 
class MyServiceImpl implements MyService { 

... 

    @Override 
    public final void save(final MyObject obj) { 
     myObjectDao.save(obj); 
    } 
+0

Вы, кажется, не определили transactionManager и должны включить обработанное аннотированное управление транзакциями –

+0

Как насчет этого jax

+0

возможно отсутствует? –

ответ

0

Оказывается есть была проблема конфигурации между моей корневой context.xml и сервлет-context.xml, я должен был сделать следующее:

я должен был поместить следующее в корневой context.xml:

<!-- Load everything except @Controllers --> 
<context:component-scan base-package="my.package"> 
    <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> 
</context:component-scan> 

и сервлет-context.xml:

<!-- Search this package for annotated Spring Beans --> 
<!-- Load @Controllers only --> 
<context:component-scan base-package="my.package" use-default-filters="false"> 
    <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/> 
</context:component-scan> 

отмечают, что use-default-filters="false" важно и является тем, что у меня было много неприятностей с первоначально, по-видимому, что сервлет перезапись бобы из корня context.xml