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



在休眠中,为什么如果我两次保存同一个对象,它不会像下面的代码那样保存,我保存员工对象两次,但它没有保存。它仅使用 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
}
}

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

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

诸如hibernate之类的ORM的目的是将数据库从代码中抽象出来,并简单地允许您将其视为通用对象容器。只需创建一次实体,然后将其放入容器中。一旦你把它放进容器中,休眠就会跟踪它,任何时候它被带走,在被放回容器之前,休眠知道它是你取出的对象,并进行更新而不是插入。

在上面的示例中,hibernate 在第一次调用保存时进行了插入,并在第二次调用时进行了更新......好吧,这太简单了,因为在第二次通话时,Hibernate知道什么都没有改变,实际上什么也没做,但这不关你的事......这就是ORM抽象的美妙之处。

最新更新