我对你的问题有点疑惑。实体对象只有在它们曾经由持久性上下文管理(例如:它们曾经被保存/更新/从数据库中检索)或者您创建一个新的实体对象并设置其主键字段时才会处于分离状态。在那之前,你的实体总是短暂的。因此,看看您的要求,为什么不将所有内容保持瞬态(例如:将其保存在 http 会话中)直到最后一步并坚持所有内容?
附带说明一下,如果我没记错的话,分离和瞬态之间的区别是主键字段。因此,如果您有一个分离的对象并且您将主键字段重置为默认值(0 或 null),那么您可以说它是一个临时实体。在引擎盖下可能有一些对象代理留在分离实体上,但不是瞬态的,但我认为它不应该影响行为:
// start transaction A..
User u1 = new User("Sam"); // u1 is transient
em.persist(u1); // u1 is managed, say database gives us id 1
// commit and end transaction A..
em.detach(u1); // u1 is detached
// start transaction B..
User u2 = new User("Sammy");// u2 is transient
u2.setId(1); // u2 can be treated as detached object of u1 because it has same id
em.merge(u2); // this should updates the user row with id 1 name from 'Sam' into 'Sammy'
// commit and end transaction B