首页 > 解决方案 > 如何在 Hibernate 中使用 session.merge?

问题描述

我现在遇到这个问题。使用休眠merge(Object o)方法,它似乎不起作用,但奇怪的是在我的其他代码上它起作用了。这是我的代码看起来像:

public Player addOrUpdate(Player player){
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = null;
    try{
        tx = session.beginTransaction();
        if(player.getId() == null){
            id = (Integer) session.save(player);
        }else{
            session.merge(player);
            id = player.getId();
        }
        tx.commit();
     }//catch and finally
}

在我的主课上,我正在尝试这样做:

PlayerDao pDao = new PlayerDao();
Player p = new Player();
p.setId(1);
p.setStatus("Hello");
pDao.addOrUpdate(p);

当我查看我的数据库时,我的数据没有任何变化。从我的其他代码(使用其他类)中,我只是做了同样的事情并且我的数据已成功更新。

标签: javahibernatesessionjpamerge

解决方案


通常,当使用HibernateUtil.getSessionFactory().openSession()而不是.getCurrentSession()您应该手动刷新对象时。

所以尝试在事务提交之前调用它:

session.flush();

推荐阅读