Spring和Hibernate保存不起作用

时间:2013-03-06 12:22:04

标签: spring hibernate struts2

我正在使用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>

in impl i have

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中有值,但它不保存任何值。并且也不显示任何插入的查询。没有错误。

任何人都可以帮助我?

3 个答案:

答案 0 :(得分:6)

您打开会话(内存中)并将内容保存到其中,但会话仅在您flush()时保存在数据库中。做一个

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

另一种方法是提交事务,因此Hibernate将自动调用flush()

答案 1 :(得分:4)

在方法中尝试使用@Transactional,并将以下内容添加到XML中:

<tx:annotation-driven/>

答案 2 :(得分:-1)

@Transaction您已经提供了服务类方法,<tx:annotation-driven/>您必须提供applicaiton-context.xml文件。

因此,当任何人调用服务类的方法时,transaciton将从spring开始,它将处理提交和回滚。