First, let's remind the various states of an entity. From the JPA 1.0 specification (in section 3.2 Entity Instance’s Life Cycle):
This section describes the
EntityManager operations for managing
an entity instance’s lifecycle. An
entity instance may be characterized
as being new, managed, detached, or
removed.
- A new entity instance has no persistent identity, and is not yet
associated with a persistence context.
- A managed entity instance is an instance with a persistent identity
that is currently associated with a persistence context.
- A detached entity instance is an instance with a persistent identity
that is not (or no longer) associated with a persistence context.
- A removed entity instance is an instance with a persistent identity, associated with a persistence context, that is scheduled for removal from the database.
And a graphical illustration:
So, by definition, a detached entity has already been persisted, and I actually don't think that this is your real question. Now, if you want to know if an entity is new (i.e. doesn't have any persistent identity), what about this:
@Transient
public boolean isNew() {
return (this.id == null);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…