关系 OneToMany 的 Envers 审计 table 外键为空
Foreign key empty on Envers audit table for relation OneToMany
我有如下关系,新修改后的审计table外键总是空的:
@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;
插入新寄存器后,原table有iid,修改后没有
有人知道这个问题。
只有一种方法会导致这种情况发生,即没有正确管理双向关系。
我怀疑您从来没有调用 Attachments#setMail
将新创建的 Mail
实体分配给 Attachments
实体,而是简单地将 Attachments
实体添加到集合中你的 Mail
实体级联。
这种双向关系的单方面维护是错误的,会导致真正不正确的结果,特别是如果实体实例是从 1LC 检查的,并且从不从数据库中刷新;这正是您在 mail_iid
字段中看到 table 和 null
的原因。
您的代码应确保正确设置关系的双方
// setup bidirectional mappings
attachments.setMail( mail );
mail.getAttachments().add( attachments );
当您这样做时,您最终会像预期的那样在审计 table 中填充 mail_iid
,并且在遍历实体的缓存实例时也避免了任何问题已加载到 1LC 中的对象图。
我有如下关系,新修改后的审计table外键总是空的:
@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;
插入新寄存器后,原table有iid,修改后没有
有人知道这个问题。
只有一种方法会导致这种情况发生,即没有正确管理双向关系。
我怀疑您从来没有调用 Attachments#setMail
将新创建的 Mail
实体分配给 Attachments
实体,而是简单地将 Attachments
实体添加到集合中你的 Mail
实体级联。
这种双向关系的单方面维护是错误的,会导致真正不正确的结果,特别是如果实体实例是从 1LC 检查的,并且从不从数据库中刷新;这正是您在 mail_iid
字段中看到 table 和 null
的原因。
您的代码应确保正确设置关系的双方
// setup bidirectional mappings
attachments.setMail( mail );
mail.getAttachments().add( attachments );
当您这样做时,您最终会像预期的那样在审计 table 中填充 mail_iid
,并且在遍历实体的缓存实例时也避免了任何问题已加载到 1LC 中的对象图。