Java Hibernate验证器不检查代理子类的约束
我使用Hibernate验证程序和Hibernate ORM。考虑这三个实体:Java Hibernate验证器不检查代理子类的约束,java,hibernate,validation,proxy,Java,Hibernate,Validation,Proxy,我使用Hibernate验证程序和Hibernate ORM。考虑这三个实体: class Person { private Pet pet; @Valid public Pet getPet() { return pet; } } abstract class Pet { private String name; @NotNull @Size(min=1) public String getName() { return
class Person {
private Pet pet;
@Valid
public Pet getPet() {
return pet;
}
}
abstract class Pet {
private String name;
@NotNull
@Size(min=1)
public String getName() {
return name;
}
}
class Cat extends Pet {
private String furColor;
@NotNull(groups=Special.class)
public String getFurColor() {
return furColor;
}
}
当我用Hibernate ORM加载一个类Person的实例时,它有一个Cat作为宠物,与“pet”的关联是惰性加载的,因此是一个HibernateProxy实例。但是,代理只从类Pet扩展,而不是从实际的类Cat扩展
当验证程序应用于具有组默认值和特殊值的人员实例时,仅验证Pet的属性“name”,而不验证属性“furColor”:
ValidatorFactory validatorFactory = Validation
.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
validator.validate(person, Default.class, Special.class);
是否有一种方法,验证程序将检查HibernateProxy的委托实例的所有约束,而不是代理本身的所有约束
我特别要求配置/修改验证器以获得正确的结果。在我的案例中,无法更改Hibernate映射以阻止ORM创建代理。javax.validation.constraints中的注释未声明为@Inherited,因此它们不会在您的案例中被继承 见-
您可以创建自己的将被继承的验证注释。javax.validation.constraints中的注释未声明为@inherited,因此它们在您的案例中不会被继承 见-
您可以创建自己的验证注释,这些注释将被继承。您可以发布一些代码来显示您如何调用验证程序吗?我已将验证程序的调用添加到原始问题中您可以发布一些代码来显示您如何调用验证程序吗?我已将验证程序的调用添加到原始问题中问题不是注释的继承,而是验证器没有检查代理类的约束@继承不会解决此问题。问题不在于注释的继承,而是验证程序不检查代理类的约束@继承不会解决此问题。