外键的关系一对多
问题描述:
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但不能修改的。
有人知道这个问题。
答
只有一个做到这一点的方式,这是不正确管理双向关系。
我怀疑你是永远不会调用Attachments#setMail
到新创建的Mail
实体分配给Attachments
实体,而是简单地将Attachments
实体添加到集合中,你Mail
实体级联。
这种类型的片面维护双向关系是错误的,并可能导致真不正确的结果,特别是如果实体实例被从1LC检查,并永远不会被从数据库更新;这也正是为什么你看到与null
审计表中您mail_iid
领域。
您的代码应该确保该关系的双方得到正确设置
// setup bidirectional mappings
attachments.setMail(mail);
mail.getAttachments().add(attachments);
当你做这种方式,你最终会与mail_iid
被填充在审计表,你会预期并遍历已加载在1LC实体的对象图的缓存实例时,也避免了任何问题。