Contract for classes (specifically, entities and components/embeddables) that are "managed".  Developers can
 choose to either have their classes manually implement these interfaces or Hibernate can enhance their classes
 to implement these interfaces via built-time or run-time enhancement.
 
 The term managed here is used to describe both:
     - 
         the fact that they are known to the persistence provider (this is defined by the interface itself)
     
 
     - 
         its association with Session/EntityManager (this is defined by the state exposed through the interface)