2014-09-20 36 views
0

我有我的计划是基于Spring MVC的与hibernate.in此更新不工作一体化的问题.. 冬眠不是Spring MVC中更新

@Override 
     public void updateAuditorium(Auditorium auditorium) { 
     openSession().update(auditorium); 
    } 

服务

@Transactional 
    public void update(Auditorium auditorium) { 
    auditoriumDAO.updateAuditorium(auditorium); 

    } 

配置

<beans:bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <beans:property name="url" value="jdbc:mysql://localhost:3306/auditoriumbooking" /> 
     <beans:property name="username" value="root" /> 
     <beans:property name="password" value="root" /> 
    </beans:bean> 

    <!-- Hibernate 4 SessionFactory Bean definition --> 
    <beans:bean id="hibernate4AnnotatedSessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <beans:property name="dataSource" ref="dataSource" /> 
     <beans:property name="packagesToScan"> 
      <beans:list> 
       <beans:value>com.company.product.model</beans:value> 
      </beans:list> 
     </beans:property> 
     <beans:property name="hibernateProperties"> 
      <beans:props> 
       <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect 
       </beans:prop> 
       <beans:prop key="hibernate.show_sql">true</beans:prop> 
      </beans:props> 
     </beans:property> 
    </beans:bean> 

功能之后执行注意到happend。

+0

你能否提供我们有任何控制台日志?用你在这里提出的东西找不出任何东西。 – A1ternat1ve 2014-09-20 15:03:50

+0

你的意思是tomcat日志? – boycod3 2014-09-20 15:08:09

+0

您需要提交交易。 – ares 2014-09-20 15:09:50

回答

0

由于您使用SessionFactory对象,你必须使用Transaction对于DB操作。 你必须创建会话,然后在会话开始一个事务,并执行数据库操作,然后将其保存到数据库中,通过提交事务

Transaction transaction = null; 
Session session = null; 
try { 
    //create the session object with openSession() and then begin transaction on session   
    session = sessionFactory().openSession(); 
    transaction = session.beginTransaction(); 
    session.update(auditorium); 
    transaction.commit(); 

} catch(HibernateException e) { 
    transaction.rollback(); 
} finally { 
    session.close(); 
} 

编辑: 问题编辑后:

您正在使用@Trasactional注释。 所以你必须创建一个HibernateTransactionManager豆(如果尚未创建),并使用

<tx:annotation-driven/> 

创建HibernateTransactionManager &定义<tx:annotation-driven/>

应用程序的context.xml

1

所有插入/更新功能必须是交易

Session session = sessionFactory.openSession(); 
    Transaction tx = session.beginTransaction(); 

    //update/insert operations here 

    session.update(auditorium); 

    tx.commit(); 

    session.close(); 

内如果你正在处理BU自己(factory.openSession())会议,那么你可以不执行事务只读操作。但是,如果你在Hibernate配置文件配置会话处理,那么hibernate会打开和关闭您的会话和交易,甚至需要只读操作。在这种情况下,你必须写factory.getCurrentSession()。事务是强制性的,因为当检测到事务结束时,hibernate会自动关闭会话。