Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
Course c1 = (Course) session.get(Course.class, 1);
tx.commit();
session.close();
c1.setCategory("science");
c1.setFee("3000");
//C1 became detached instance here
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
Course c2 = (Course) session.get(Course.class, 1);
c2.setCategory("social");
c2.setRecommendedBook("Modern History");
session.merge(c1);
tx.commit();
session.close();
假设我的初始数据库表数据是
类别 = 数学
费用 = 1000
推荐书 = 数学魔法
我认为上面的代码会将不常见的字段从 C1 复制到 C2,并用 C1 覆盖 C2 的常见字段。所以预期的结果是
类别=科学
费用=3000
推荐书籍=现代历史
但它只是将整个C1数据复制到C2并用C1更新数据库,我所有的C2数据都丢失了。实际结果是
类别=科学
费用=3000
推荐书籍=数学魔术
所以它实际上不是合并,而是完全覆盖。如何获得我的预期结果?