J'utilise Hibernate Envers pour l'audit et j'ai un problème avec les clés primaires composites. J'ai beaucoup à beaucoup d'entités avec la clé primaire composée basée sur les propriétés relatives. La construction est comme suit:Hibernate Envers clé primaire composite relatedId request
@Entity
@Audited
@Table(indexes = { @Index(columnList = "person_id"),
@Index(columnList = "document_id") })
public class PersonDocument implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Document document;
@Id
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Person person;
La relation n'est pas bidirectionnelle annotée. La clé primaire est correcte utilisée dans les tables auditées, comme le docu d'envers le décrit.
Mais maintenant je ne veux pas toutes les révisions qui se rapportent à la personne. Avec ce qui suit:
final AuditQuery query = AuditReaderFactory.get(entityManager)
.createQuery().forRevisionsOfEntity(PersonDocument.class, false, true)
.add(AuditEntity.relatedId("person").eq("12"))
.addOrder(AuditEntity.revisionNumber().desc());
Je me l'erreur suivante:
This criterion can only be used on a property that is a relation to another property.
Si j'utilise une clé primaire non composite alors il fonctionne sans problèmes, mais je reçois l'erreur. Quelqu'un a-t-il une idée? La migration des données de la clé primaire composite vers une clé primaire supplémentaire pour plusieurs à plusieurs entités n'est pas si facile.
J'utilise la version 4.3.11 Mise en veille prolongée
Meilleures salutations
J'ai ajouté un JIRA lié à cette discussion ici: https://hibernate.atlassian.net/browse/HHH-11748 – Naros
Le correctif pour cela s'est avéré assez simple. Nous avons juste besoin d'être en mesure d'effectuer un second passage sur les identifiants, tout comme nous le faisons pour les propriétés non-identifiant pour lier les associations et les propriétés des composants. – Naros