属性 的复合键未找到
Property of Composite Key Not Found
我有以下实体:
@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: could not resolve property: myParent_id of: org.acme.project.Child_AUD [select e__ from org.acme.project.Child_AUD e__ where e__.myParent_id = :myParent_id and e__.originalId.REV.id = (<removed internal query>)]
我使用了这个代码:
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 在文档中看起来非常相似,但我不知道根据它所说的我应该做什么。
我错过了什么吗?或者这是另一个错误?我如何让代码工作?
我有以下实体:
@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: could not resolve property: myParent_id of: org.acme.project.Child_AUD [select e__ from org.acme.project.Child_AUD e__ where e__.myParent_id = :myParent_id and e__.originalId.REV.id = (<removed internal query>)]
我使用了这个代码:
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 在文档中看起来非常相似,但我不知道根据它所说的我应该做什么。
我错过了什么吗?或者这是另一个错误?我如何让代码工作?