我目前面临一个非常奇怪的问题。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验证并手动调用验证器。
所以我的问题是:
- 有没有人遇到这个问题之前?
- 关于接下来我可以尝试的任何建议?
谢谢大家的阅读!
嘿,谢谢你的回答。它帮助我解决了这个问题。解释也非常详细。当它让我时,我会奖赏你的赏金。再次感谢人! –