2017-10-10 110 views
0

Envers审计表空我有以下关系和外键总是在审核表空全新改版后:外键的关系一对多

@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; 

新寄存器的插入后,原来的表有IID但不能修改的。

有人知道这个问题。

回答

0

只有一个做到这一点的方式,这是不正确管理双向关系。

我怀疑你是永远不会调用Attachments#setMail到新创建的Mail实体分配给Attachments实体,而是简单地将Attachments实体添加到集合中,你Mail实体级联。

这种类型的片面维护双向关系是错误的,并可能导致真不正确的结果,特别是如果实体实例被从1LC检查,并永远不会被从数据库更新;这也正是为什么你看到与null审计表中您mail_iid领域。

您的代码应该确保该关系的双方得到正确设置

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

当你做这种方式,你最终会与mail_iid被填充在审计表,你会预期并遍历已加载在1LC实体的对象图的缓存实例时,也避免了任何问题。