在休眠状态下,为什么两次保存相同的实体对象不起作用

时间:2019-08-12 14:37:10

标签: hibernate

在休眠状态下,为什么我要保存两次相同的对象却没有保存,就像下面的代码一样,我保存了两次雇员对象,但是却没有保存。它只保存一次ID为1的对象。

public static void main(String[] args) {
        try (Session session = HibUtility.getSessionFactory().openSession()){
            System.out.println("session===:: session"+session);
            Employee employee=getEmployee();
            System.out.println("employee==::"+employee);
            session.beginTransaction();
            session.save(employee);
            session.save(employee);
            session.getTransaction().commit();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

2 个答案:

答案 0 :(得分:0)

因为要保存相同的Employee实例。这就是为什么只创建一个员工记录的原因。您需要做的是创建两个单独的Employee实例:

Employee employee1 = getEmployee();
session.save(employee1);

Employee employee2 = getEmployee();
session.save(employee2);

答案 1 :(得分:0)

诸如休眠的ORM的目的是将数据库从代码中抽象出来,而只是让您将其视为通用对象容器。您只需创建一次实体,然后将其放入容器中。一旦将其放入容器中,hibernate就会第一次对其进行跟踪,并且无论何时将其带回我们的容器,hibernate都会知道它是您取出的对象并进行更新而不是插入。

在上面的示例中,hibernate在第一次调用保存时进行了插入,而在第二次调用中进行了更新……这是一个过分的简化,因为在第二次调用中,hibernate知道什么都没有改变并且实际上什么也没做,但是不用担心...这就是ORM抽象的优点。