我有以下实体:
@Entity @Table @Audited
public class MyParent {
@Id
@Column
Integer id;
@OneToMany(mappedBy = "id.myParent", orphanRemoval = true)
@Cascade({ CascadeType.ALL })
List<Child> children;
}
@Entity @Table @Audited
public class Child {
@EmbeddedId
ChildId id = new ChildId();
}
@Embeddable
public class ChildId implements Serializable {
@MapsId("my_parent")
@JoinColumn(name = "my_parent_id")
@ManyToOne
MyParent myParent;
@Column
String name;
}
在我添加注释@Audited
之前,一切正常。之后一切都失败了,因为Hibernate 5.1不喜欢复合键(参见HHH-7625)。
花了很长时间,但我刚刚设法更新到5.2,现在一切正常......除了审核。我得到以下异常:
org.hibernate.QueryException:无法解析属性:myParent_id:org.acme.project.Child_AUD [从org.acme.project.Child_AUD e__中选择e__,其中e __。myParent_id =:myParent_id和e __。originalId.REV。 id =(&lt;删除内部查询&gt;)]
我使用了这段代码:
AuditReader auditReader = AuditReaderFactory.get(this.em);
MyParent parent = auditReader .find(MyParent.class, id, revision);
parent.getChildren(); // exception is here
那么Envers从哪里获得myParent_id
?我不确定。我尝试将列my_parent_id
重命名为该ID,但它没有做任何事情。
我尝试用ID替换ChildId.myParent
,但这也无济于事。
This paragraph看起来非常相似,但我根据其说法不知道应该做些什么。
我错过了什么吗?或者这是另一个错误?如何让代码工作?