我有以下實體:組合鍵找不到屬性
@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 =(<去除內部查詢>)
我用這個代碼:
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在文檔中看起來異常相似,但我不知道我應該怎麼做根據它說什麼。
我錯過了什麼嗎?或者這又是一個錯誤?我如何讓代碼工作?
您是否在'MyParent'的'@ OneToMany'映射上嘗試了@AuditMappedBy(mappedBy =「id.myParent」)'來查看這是否有助於影響Envers? – Naros
@Naros是的,那麼例外是:「@AuditMappedBy指向一個不存在的屬性:org.acme.project.Child.id.myParent」 –