lectery 2009-04-13 17:00
浏览 264
已采纳

使用Hibernate的一个问题

在使用Hibernate是遇到了这样一个问题:
当在servlet中调用DAO的save方法并提交事务后,控制台显示已经执行了sql语句,但是却没有向数据库中记录,如果把数据库的隔离级别设置为未提交读,这是可以看见刚插入的记录,但是之前已经调用了提交事务的语句,这是为什么呢?
注:主键生成策略为“native”,数据库是MySQL。
[b]问题补充:[/b]
已经把数据库操作放到了事务中,而当第二条记录提交的时候才会向数据库中插入第一条记录,而新提交的记录不会被插入。
[b]问题补充:[/b]
[code="java"]
UserDAO userDAO = new UserDAO();
User user = new User();

    SessionFactory sessionFactory = HibernateSessionFactory.getSessionFactory();
    Session session = sessionFactory.openSession();
    Transaction tx = null;

    user.setUsername(registerForm.getUsername());

    user.setEmail(registerForm.getEmail());

    try {
        tx = session.beginTransaction();
        userDAO.save(user);
        tx.commit();
    }
    catch (RuntimeException e) {
        if (tx != null)
            tx.rollback();
        throw e; 
    }
    finally {
        session.close();
    }

[/code]

  • 写回答

7条回答 默认 最新

  • zjh527 2009-04-14 11:27
    关注

    把你的Servlet和Dao中取得Hibernate Session的方式多换成Session session = HibernateSessionFactory.getSession(); (如果你的HibernateSessionFactory类中没有getSession方法,你自己用MyEclipse去生成一个,在添加Hibernate框架是会自动创建这个类的),在Dao里不要关闭session,session都放到你调用Dao的方法中去关闭。

    你可以先试一下下面这个修改
    [code="java"]
    UserDAO userDAO = new UserDAO();

    User user = new User();

    [color=red] Session session = HibernateSessionFactory.getSession(); [/color]
    Transaction tx = null;

     user.setUsername(registerForm.getUsername());   
    
     user.setEmail(registerForm.getEmail());   
    
     try {   
            tx = session.beginTransaction();   
            userDAO.save(user);   
            tx.commit();   
      }catch (RuntimeException e) {   
            if (tx != null)   
                tx.rollback();   
            throw e;    
      }finally {   
            session.close();   
      } 
    

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥20 fluent无法启动
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。