session.update()或session.save()的数据没有反映在数据库中?

时间:2017-04-21 06:55:40

标签: java spring hibernate spring-mvc

我正在使用spring mvc 3.2和hibernate 3.6.3开发Web应用程序 我在我的DAO类中出现了HibernateDaoSupport类。现在我想使用 session.update()更新实体,其中我从hibernateDaoSupport方法 getSession()获取会话。我也在使用交易。 但是在提交事务之后,更新没有反映在数据库中。但是如果我在提交之前使用 session.flush(),那么它会被反映出来。我知道 transaction.commit 在提交之前调用flush,那么为什么它不更新记录。我没有在我的应用程序上下文中使用任何事务管理器,而是hibernatedaosupport如何管理事务。当一个新的会话将在我的应用程序中打开,因为 getSession 方法检查来自当前事务的会话,如果它发现那么它返回其他新的。这意味着新的hibernate会话是否会在每个http请求中打开?

我的Dao代码是 -

public Map<String, Object> addImmunizationCard(Box box,
            Map<String, Object> dataMap) {
        Session session = (Session) getSession();
        Map<String, Object> map = new HashMap<String, Object>();
        Transaction tx = null;
try {
            tx = session.beginTransaction();

MasBed bed = (MasBed)session.get(MasBed.class, new Integer(1101));

            System.out.println(bed.getBedNo());
            bed.setBedNo("Amit Das");
            session.update(bed);
            tx.commit();

        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        }
        return map;
}

1 个答案:

答案 0 :(得分:0)

默认刷新模式为AUTO,这意味着它有时会在查询执行之前刷新。当刷新模式设置为COMMIT时,则在事务提交之前完成刷新。

请参阅https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/FlushMode.html