2017-10-10 7 views
0

J'ai la relation et la clé étrangère est toujours vide dans la table de vérification après la nouvelle révision:clé étrangère vide sur la table d'audit Envers pour la relation OneToMany

@ManyToOne 
@Audited(targetAuditMode=RelationshipTargetAuditMode.NOT_AUDITED) 
@JoinColumn(name="mail_iid") 
@private Mail mail; 

...

@OneToMany(cascade=Cascade.ALL, orphan = true, fetch= fetchType.LAZY) 
@JoinColumn(name="mail_iid") 
private List<Attachments> attachments; 

Après l'insertion d'un nouveau registre, la table d'origine possède l'iid mais pas la révision.

Quelqu'un connaît ce problème.

Répondre

0

Il n'y a qu'une seule façon de procéder, qui ne gère pas correctement les relations bidirectionnelles.

Je soupçonne que vous n'êtes jamais appelez Attachments#setMail pour affecter l'entité nouvellement créée Mail aux Attachments entités et au lieu d'ajouter simplement l'entité Attachments à la collection que vos Mail cascades d'entités. Ce type de maintenance unilatérale des relations bidirectionnelles est incorrect et peut conduire à des résultats réellement incorrects, en particulier si les instances d'entité sont inspectées depuis le 1LC et ne sont jamais actualisées à partir de la base de données; C'est précisément pourquoi vous voyez la table d'audit avec null dans votre champ mail_iid.

Votre code doit faire en sorte que les deux côtés de la relation se préparent correctement

// setup bidirectional mappings 
attachments.setMail(mail); 
mail.getAttachments().add(attachments); 

Lorsque vous le faites de cette façon, vous vous retrouverez avec mail_iid étant peuplée dans votre table de vérification que vous attendiez et évite également tout problème lors de la traversée d'instances en cache du graphe d'objet d'une entité déjà chargé dans le 1LC.