我真的对分离实体和瞬态实体感到困惑。根据定义,临时实体不与会话关联,并且没有DB记录。分离的实体与会话关联,并具有数据库记录。所以对于前。如果我有一个人表。人员表中有一条ID为2的记录。因此,如果执行以下操作:
Person p = new Person();
p.setId(2);
由于实体p具有数据库记录但未与会话关联,是否将其视为已分离?还是会被认为是短暂的?如果是瞬态的,那么以下代码是否是创建分离实体的正确示例?
Person p = session.load(Person.class,2);
session.evict(p); // does this make the entity detached?
我对于上述哪种方法创建独立实体感到非常困惑,因此任何见解都将受到高度赞赏!谢谢!
答案 0 :(得分:0)
如果我们像下面这样执行session.evict(obj);
:
Person p = session.load(Person.class,2);
session.evict(p);
然后将POJO对象逐出或从持久状态恢复为分离状态。这样,POJO对象的该状态为分离状态。之后,GC(垃圾收集器)可以轻松清洁该物体。所以
session.evict(p); // does this make the entity detached? Yes it is in detached state.
答案 1 :(得分:0)
是正确的:
先对托管实体对象进行序列化然后反序列化, 反序列化的实体对象(但不是原始序列化的对象)是 构造为独立实体对象,因为与 任何EntityManager。
和瞬态实体字段:
临时实体字段是不参与的字段 持久性及其值永远不会存储在数据库中(类似 到Java中不参与序列化的瞬态字段。
现在您可以总结问题的答案了。
答案 2 :(得分:0)
当实体由 EntityManager 维护时,实体被称为分离的,然后通过调用 evict() 方法将其分离。
瞬态可以有两种类型。