2013-03-06 136 views
0

我使用Hibernate和Spring 3.0我试图将值保存到数据库,但是当我看到一个控制台唯一的选择查询显示插入或更新不显示并保存不起作用春季和休眠保存不工作

我创建了一个SessionFactory的bean,并将其注入到默认地将Impl

<bean id="GetStartedDAOBean" class="com.sample.dao.impl.GetStartedDAOImpl" > 
      <property name="sessionfactory" ref="sessionFactory"> 
      </property> 
    </bean 

<bean id="GetStartedActionBean" class="com.sample.action.GetStartedAction"> 
     <property name="getStartedDAOImpl" ref="GetStartedDAOBean"></property> 
     <property name="industryDAOImpl" ref="IndustryDAOBean"></property> 
     <property name="stateDAOImpl" ref="stateDAOBean"></property> 
    </bean> 

在IMPL我有

private SessionFactory sessionfactory; 

     public void setSessionfactory(SessionFactory sessionfactory) { 
     this.sessionfactory = sessionfactory; 
     } 


    public void save(Customer customer)throws IllegalStateException,SystemException{ 

     try { 
      sessionfactory.openSession().saveOrUpdate(customer); 
     } 
     catch(Exception e){ 
      e.printStackTrace();  
     } 

    } 

当调试存在SessionFactory的价值,但它不保存任何值。也不显示任何插入的查询。没有错误。

任何人都可以帮助我吗?

回答

6

你打开你的会话(内存)和保存的东西到它,但会在数据库中保存,只有当你flush()。做一个

Session session = sessionfactory.openSession(); 
session.saveOrUpdate(customer); 
session.flush(); 

另一种方式是提交事务,从而Hibernate会自动调用flush()

4

@Transactional尝试在方法,并添加以下到您的XML:

<tx:annotation-driven/> 
+0

我在哪里给@Transactional – jackyesind 2013-03-06 12:24:37

+0

你在哪里调用save()方法 – PSR 2013-03-06 12:25:08

+0

你检查了这个 – PSR 2013-03-06 12:26:36

-1

@Transaction你已经给服务类的方法和<tx:annotation-driven/>你必须给applicaiton-context.xml文件。

因此,当任何一个调用服务类的方法时,交易将在春季开始,它将处理提交和回滚。

+0

这与PSR的答案相同。 – 2013-03-06 14:20:34

+0

是正确的,但在那另外我提到@Transactionl必须穿上服务类。 – 2013-03-06 14:23:09

+0

它应该是“@Transactional”和“application-context”。另外,你只是重复了PSR的答案。 – fivedogit 2015-05-28 15:44:45