Hibernate代理上的Bean验证失败?预期的行为?

Mar*_*vin 5 hibernate jpa behavior lazy-loading bean-validation

我正在使用

  • hibernate-core-4.0.1.Final
  • hibernate-validator-4.2.0.Final

我有一个懒惰的可加载实体

@NotNull
@OneToOne(fetch = FetchType.LAZY,optional = false,cascade = CascadeType.PERSIST)
@JoinColumn(name="library_id")
private Library library;

public Library getLibray() {
    return library;
}
Run Code Online (Sandbox Code Playgroud)

和一个defaultValidator

 private final ValidatorFactory factory = Validation
           .buildDefaultValidatorFactory();
 private final Validator val = factory.getValidator();
Run Code Online (Sandbox Code Playgroud)

当我尝试验证未附加和附加的实体注释@NotNull, @Size等等.一切正常.但是,当我通过Lazy Load加载实体并尝试验证它.验证器每次都失败.这似乎是因为我获得了一个Hibernate代理对象.

我可以轻易地解决这个"问题",只是不用它.(但在我的情况下这不是那么有利)

这是预期的行为吗?我是否在OpenJPA,EclipseLink中获得相同的行为....

有一个愉快的星期天家伙;)我希望我确实让问题清楚了吗?

Mik*_*unu 5

可以通过注释方法而不是字段来解决问题.

这在HVAL-13问题以及HV-535中进一步讨论.如果替换注释不可行,则错误报告中建议的解决方案是使用HibernateProxyValidator.