persistence icon indicating copy to clipboard operation
persistence copied to clipboard

Embeddable should be allowed as static inner class

Open lostiniceland opened this issue 4 years ago • 0 comments

For embeddables, the current specification says

Embeddable classes must adhere to the requirements specified in Section 2.1 for entities with the exception that embeddable classes are not annotated as Entity. Embeddable classes must be annotated as Embeddable or denoted in the XML descriptor as such.

And section 2.1 says, among other things

The entity class must be a top-level class.

Modelling an embeddable class as a inner class of an entity is sometimes very usefull. For instance, it makes clear where this embeddable belongs. For a top-level class, the naming would need to follow something like MyEntity and MyEntitySomething, whereas using an inner class the embeddable could just be named Something since it is clear where it belongs.

Hibernate actually already supports this, and we are using this approach, but since it is not covered by the spec we are not sure if this is future-proof.

@Entity
public MyEntity {

   ... other stuff omitted

   @Embedded
   private Something something
  
   @Embeddable
   public static class Something {

   }
}

lostiniceland avatar Sep 10 '21 06:09 lostiniceland