Search code examples
javahibernatehibernate-envers

Hibernate Envers : Embedded extended MappedSuperClass raise exception on startup


I'm currently trying to use Hibernate Envers on my project, but I got the following exception. I think it's because of MedicalSummaryId which contains no data and extends a mapped superclass, but I don't see how fix it.

I'm using Hibernate 4.3.8.Final.

Exception :

Caused by: org.hibernate.MappingException: Type not supported: org.hibernate.type.ComponentType
    at org.hibernate.envers.configuration.internal.metadata.IdMetadataGenerator.addIdProperties(IdMetadataGenerator.java:97)
    at org.hibernate.envers.configuration.internal.metadata.IdMetadataGenerator.addId(IdMetadataGenerator.java:161)
    at org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator.generateFirstPass(AuditMetadataGenerator.java:598)
    at org.hibernate.envers.configuration.internal.EntitiesConfigurator.configure(EntitiesConfigurator.java:107)
    at org.hibernate.envers.configuration.spi.AuditConfiguration.<init>(AuditConfiguration.java:130)
    at org.hibernate.envers.configuration.spi.AuditConfiguration.getFor(AuditConfiguration.java:180)
    at org.hibernate.envers.event.spi.EnversIntegrator.integrate(EnversIntegrator.java:76)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
    ... 87 more

MedicalHistory.java

@Entity
@Audited
public class MedicalHistory extends BaseEntity {
    @EmbeddedId MedicalHistoryId medicalHistoryId = new MedicalHistoryId();
    @NotNull String description;
}

MedicalHistoryId.java

@Embeddable
public class MedicalHistoryId implements Serializable {
    @NotNull public MedicalSummaryId medicalSummaryId;
    @NotNull public long id = 0;
}

MedicalSummaryId.java

@Embeddable
public class MedicalSummaryId extends AggregateRootId{
     // no data
}

AggregateRoot.id

@Embeddable
@MappedSuperclass
public class AggregateRootId implements Serializable {
    protected Integer id;
}

Thanks for your help.


Solution

  • The problem seems to come from the composite key so, I found a non satisfying workaround, instead of using the composite key, if I use a simple key it's working.