【问题标题】:How to work with session.merge in Hibernate?如何在 Hibernate 中使用 session.merge?
【发布时间】:2019-09-05 06:49:20
【问题描述】:

我现在遇到了这个问题。使用休眠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);

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

【问题讨论】:

  • 其他代码是什么?
  • 我的其他持久类。比如,Address 等。
  • 持久化场景有效吗?
  • 坚持并且 saveOrUpdate 不起作用。我无法检测到错误在哪里。

标签: java hibernate session jpa merge


【解决方案1】:

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

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

session.flush();

【讨论】:

  • 我做了你的建议,但我的数据仍然没有任何变化。
  • 你是否在 finally 子句中关闭会话?
  • 是的。我总是关闭会话。
  • 哦。我明白了,我发现错误在哪里。我正在尝试保留一个长度大于我设置的长度的字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 2016-12-20
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多