是一个暂态实体,id设置仍然是暂态实体或分离实体



根据定义,新实例化的POJO,例如transientPerson,是一个暂态实体。

Person transientPerson = new Person();

脱离持久上下文的实体是一个分离的实体。

Person detachedPerson = session.get(Person.class, id);
session.detach(detachedPerson);

detachedPerson的所有字段设置为transientPerson后,transientPerson是否仍然是暂态实体?

transientPerson.setId(detachedPerson.getId());
transientPerson.setName(detachedPerson.getName());

如果是这种情况,是否意味着我能够使用persist(transientPerson)来更新DB中相应的表?

暂态实体和分离实体的主要区别在于该实体在DB中是否真的有相应的记录存在。暂态实体没有,但分离实体有(见官方定义)。

所以在这种情况下,transientPerson技术上将被分离,因为它确实存在一个DB记录。

并且对已经存在于DB中的实体(即分离实体)调用persist()将抛出EntityExistsException。您必须使用merge()来插入或更新已分离的。

最新更新