我目前面臨一個非常奇怪的問題。Bean驗證@ElementCollection和@Version衝突並且驗證失敗
我有一個實體,其中包含屬性是一個元素集合。
@ElementCollection(targetClass=Integer.class, fetch = FetchType.EAGER)
@CollectionTable(name="campaign_publisher", [email protected](name="campaign_id"))
@Column(name = "publisher_id")
...
@NotEmpty(message = "campaign.publishers.missing")
public Set<Integer> getPublishers() {
return this.publishers;
}
public Campaign setPublishers(Set<Integer> publisherId) {
this.publishers = publisherId;
return this;
}
這一切工作正常。這些值經過驗證並保存正確。
我也想,所以我申請一個@版本註解以及該實體擁有樂觀併發。
@Version
private Long etag = 0L;
...
public Long getEtag() {
return etag;
}
public void setEtag(Long etag) {
this.etag = etag;
}
通過添加@Version註釋@NotEmpty驗證我的發佈者集合總是返回無效。
要嘗試和診斷這個我試過如下:
在實體層面創建自定義的驗證,所以我可以在實體檢查值。我發現Set的值已被替換爲一個空的PersistentSet,導致驗證始終失敗。
我創建了使用該從validationfactory檢索到的驗證,這似乎驗證按預期方式工作的實體一些單元測試。
我也試圖給ElementCollection更改爲許多一對多關係和雙向一個一對多的,但問題仍然存在。
現在我不知道了。我唯一能找到的工作是在保存數據之前禁用hibernate驗證並手動調用驗證器。
所以我的問題是:
- 有沒有人遇到這個問題之前?
- 關於接下來我可以嘗試的任何建議?
謝謝大家的閱讀!
嘿,謝謝你的回答。它幫助我解決了這個問題。解釋也非常詳細。當它讓我時,我會獎賞你的賞金。再次感謝人! –