关于OneToMany

时间:2017-10-10 01:01:39

标签: spring-boot foreign-keys hibernate-envers is-empty

我有以下关系,并且在新版本之后,审计表中的外键始终为空:

@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但不包含修订版本。

有人知道这个问题。

1 个答案:

答案 0 :(得分:0)

只有一种方法可以实现,而不是正确管理双向关系。

我怀疑您永远不会致电Attachments#setMail将新创建的Mail实体分配给Attachments实体,而只需将Attachments实体添加到您的Mail实体的集合中{1}}实体级联。

这种双向关系的单方面维护是错误的,并且可能导致真正不正确的结果,特别是如果正在从1LC检查实体实例并且永远不会从数据库刷新;这正是您在null字段中看到mail_iid审核表的原因。

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

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

当你这样做的时候,你最终会像你期望的那样在你的审计表中填充mail_iid,并且当遍历已经加载的实体的对象图的缓存实例时也避免任何问题在1LC。

相关问题