[hibernate-dev] IdClass superclasses

Steve Ebersole steve at hibernate.org
Tue Dec 10 16:12:59 EST 2019


To me this is perfectly consistent with how inheritance works in entity
hierarchies.  Unless a super type is marked with @Entity
or @MappedSuperclass, the "attributes" defined on that specific class are
not picked up.

Maybe I'm misunderstanding you?

On Mon, Dec 9, 2019 at 1:58 PM Gail Badner <gbadner at redhat.com> wrote:

> Hi,
>
> Suppose we have the following:
>
> public class CompositeKey implements Serializable {
>
>   private Long id1;
>
>   private Long id2;
>
>   public CompositeKey(Long id1, Long id2) {
>     super();
>     this.id1 = id1;
>     this.id2 = id2;
>   }
> ...
> }
> public class InheritedKey extends CompositeKey {
>
>   private Long id3;
>
>   public InheritedKey(Long id1, Long id2, Long id3) {
>     super(id1, id2);
>     this.id3 = id3;
>   }
> ...
> }
>
> @Entity(name = "IKE")
> @IdClass(InheritedKey.class)public class InheritedKeyEntity {
>
>   @Id
>   private Long id1;
>
>   @Id
>   private Long id2;
>
>   @Id
>   private Long id3;
>
>   private String name;
> ...
> }
>
>
> Currently, Hibernate does not include InheritedKey#id3 in
> InheritedKeyEntity's composite key unless InheritedKey is annotated with
> @MappedSuperclass.
>
> I think there are some improvements that can be made.
>
> 1) As you can see, the entity, itself, has all of the ID fields annotated.
> An improvement would be for Hibernate to ensure that all mapped ID
> properties have been detected, and throw an exception if this is not the
> case.
>
> 2) A class used as an IdClass does not need any annotations (as opposed to
> a class used for an EmbeddedId class, which requires {{@Embeddable}}).
> Since the class used as an IdClass does not need to be annotated, it seems
> kind of strange that its superclass would need to be annotated with
> {{@MappedSuperclass}} in order for its fields/properties to be persistent.
> Since the field/property names must match what is annotated in an IdClass,
> it is clear that the field/property in a superclass is intended to be an
> ID. Perhaps we could make annotating the superclass with
> {{@MappedSuperclass}} optional?
>
> Opinions?
>
> Thanks,
> Gail
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
>


More information about the hibernate-dev mailing list