测试代码:
Script sc = new Script();
sc.setName("2");
// new ScriptManage().save(sc);
ScriptDAO sdao = new ScriptDAO(null, null);
sdao.save(sc);dao中的save方法:public void save(Script transientInstance) {
log.debug("saving Script instance");
try {
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}没有insert语句输出,我配置了showsql = true的,我其他的dao中的save方法有的可以,到底是怎么回事???

解决方案 »

  1.   

    执行了,我放了一条语句在getSession().save(transientInstance);
    后面测试,都输出来了
      

  2.   

    现在是连sql语句都没有哦,不是提交出问题把?
      

  3.   

    hibernate默认开启了事务
    不用事务前面加这个试试:
    getSession().connection().setAutoCommit(true);当然这么做一般不提倡。大多数是这样的:
    session.beginTransaction(); 
    session.save(pojo); 
    session.getTransaction.commit(); 
      

  4.   

    Quote=引用 6 楼 haydenwang8287 的回复:]
    事务呢?
    事务结束后才真正进数据库。
    [/Quote]
    最后加上 getSession().beginTransaction().commit();
    确实可以打印出来,并存到数据库。问题是,如果我在dao里面加这个的话,会与下面的冲突:
    package com.jadecenter.filter;import java.io.IOException;import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.hibernate.Transaction;import com.jadecenter.hibernate.HibernateSessionFactory;public class HibernateFilter implements Filter {

    private static Log log =LogFactory.getLog(HibernateFilter.class); public void destroy() {
    // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    // TODO Auto-generated method stub
    Transaction t = HibernateSessionFactory.getSession().beginTransaction();
    try{
    //System.out.println("Filter");
    chain.doFilter(request, response);
    t.commit();
    }catch(ServletException ex){
    t.rollback();
    throw ex;
    }catch(IOException e){
    t.rollback();
    throw e;
    } } public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub }}配置文件web.xml:
    <!-- hibernate过滤器 -->
    <filter>
    <filter-name>hibernate</filter-name>
    <filter-class>
    com.jadecenter.filter.HibernateFilter
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>hibernate</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>
      

  5.   

    由于用了过滤器,自动对*.do文件开启事务,而我在普通的java类中也用到了dao中的方法,即没开启事务。如果我在dao中再加上事务的话,到时会出现与过滤器中的事务开启重复,导致事务出错,请高手出招!!!
      

  6.   

    将你的代码修改一下试试:public void save(Script transientInstance) {
            log.debug("saving Script instance");
            HttpSession session = getSession();
            try {
                session.save(transientInstance);
                session.flush();
                log.debug("save successful");
            } catch (RuntimeException re) {
                log.error("save failed", re);
                throw re;
            } finally{
                session.close();
            }
        }
      

  7.   

    归根揭底是你的session用的不是一个。
    如果当然线程对应的session已经存在,直接使用就好了。
    OpenSessionInviewFilter就是这么做的,你自己写的话,应该跟这个差不了
    多少吧
      

  8.   

    hibernate保存需要用SQL语句么。。