У меня есть несколько сущностей, которые имеют следующие отношения: Упрощенная ERD
Во всех таблицах объединения есть дополнительные поля (не показаны).
У меня проблемы с аудитомсоединения для OrderOutletProducts.
Моя попытка:
OutletProduct
@Audited
@Entity
public class OutletProduct {
@EmbeddedId
private OutletProductPk pk;
@ManyToOne
@MapsId("outletId")
@JoinColumn(name = "outlet_id")
private Outlet outlet;
@ManyToOne
@MapsId("productId")
@JoinColumn(name = "product_id")
private Product product;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "outletProduct")
private Set<OrderOutletProduct> orderOutletProducts = new HashSet<OrderOutletProduct>();
}
OutletProductPk
@Embeddable
public class OutletProductPk implements Serializable {
@Column(name = "outletId")
private Long outletId;
@Column(name = "productId")
private Long productId;
// equals, hashcode, etc...
}
OrderOutletProduct
@Audited
@Entity
public class OrderOutletProduct {
@EmbeddedId
private OrderOutletProductPk pk;
@ManyToOne
@MapsId("orderId")
@JoinColumn(name = "order_id")
private Order order;
@ManyToOne
@MapsId("outletProductPk")
@JoinColumns({
@JoinColumn(name = "outlet_id"),
@JoinColumn(name = "product_id"),
})
private OutletProduct outletProduct;
}
OrderOutletProductPk
@Embeddable
public class OrderOutletProductPk implements Serializable {
private Long orderId;
private OutletProductPk outletProductPk;
// equals, hashcode, etc...
}
Это приводит к:
Invocation of init method failed; nested exception is org.hibernate.MappingException: Type not supported: org.hibernate.type.ComponentType
[...]
Caused by: org.hibernate.MappingException: Type not supported: org.hibernate.type.ComponentType
at org.hibernate.envers.configuration.internal.metadata.IdMetadataGenerator.addIdProperties(IdMetadataGenerator.java:80)
at org.hibernate.envers.configuration.internal.metadata.IdMetadataGenerator.addId(IdMetadataGenerator.java:144)
at org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator.generateFirstPass(AuditMetadataGenerator.java:632)
at org.hibernate.envers.configuration.internal.EntitiesConfigurator.configure(EntitiesConfigurator.java:94)
at org.hibernate.envers.boot.internal.EnversServiceImpl.doInitialize(EnversServiceImpl.java:152)
at org.hibernate.envers.boot.internal.EnversServiceImpl.initialize(EnversServiceImpl.java:117)
at org.hibernate.envers.boot.internal.AdditionalJaxbMappingProducerImpl.produceAdditionalMappings(AdditionalJaxbMappingProducerImpl.java:99)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:288)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:848)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:875)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:340)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:319)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1579)
... 59 more
Наличие envers в трассировке стека заставило меня попытаться удалить @Audited
, но эта попытка была встречена с жалобами нанеаудированная сущность присоединилась к проверяемому объекту, и хотя снятие с контроля всей моей схемы устраняет ошибку, о моих требованиях не может быть и речи.
Я использую Hibernate 5.1.12.Final с соответствующими Envers.
Редактировать: Похоже, проблема описана здесь .