何时在分离实体的情况下使用merge vs update

时间:2014-05-19 17:21:39

标签: hibernate merge

public class unconnected {
    public static void main(String[] args) {
        //System.out.println("enter the id you want toc carry change on");
        //Scanner s=new Scanner(System.in);
        //int id=s.nextInt();
        dao x=new dao();
    emp e=  x.findbyid(id);
        e.setId(10);
        e.setName("dsfsdassafasdsa");
        e.setJob("546");
        e.setSalary(789);
        x.update(e);
        }

public class dao {
    public emp findbyid(int id)
    {
    Session session=myfactory.getSession();
    emp e=(emp)session.get(emp.class, id);
    session.close();
    return e;
    }
    public void update(emp e)
    {
    Session session=myfactory.getSession();
    Transaction t=session.beginTransaction();
    session.merge(e);
    t.commit();
    session.close();

    }


}

现在我的问题是如果我在更新session.update(e)中使用它也有效,它也会更新数据库中的值,那么我怎么知道何时使用merge以及何时使用update来分离实体

1 个答案:

答案 0 :(得分:0)

当您有2个代表同一实体的分离对象时,应使用合并。 Hibernate将自动确定最后更新的字段并将两个对象合并在一起,以便最新信息出现在新对象中,然后将其添加到数据库中。

当您只想用分离的实体更新数据库对象时,应该使用更新。

例: Foo1Foo2都是Foo对象,其中包含字段Bar1Bar2。在Foo1的{​​{1}}值之后,Bar1的{​​{1}}值已更新。当您调用合并时,Foo2的{​​{1}}值将用于更新Bar1的数据库实例。