gpt4 book ai didi

java - Hibernate Validator 不检查代理子类的约束

转载 作者:行者123 更新时间:2023-11-29 09:29:19 26 4
gpt4 key购买 nike

我使用 Hibernate Validator 和 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 name;
}
}

class Cat extends Pet {
private String furColor;

@NotNull(groups=Special.class)
public String getFurColor() {
return furColor;
}
}

当我用 Hibernate ORM 加载类 Person 的实例时,它有一只猫作为宠物,它碰巧与“宠物”的关联是延迟加载的,因此是一个 HibernateProxy 实例。但是,代理只从 Pet 类扩展,而不是从实际的 Cat 类扩展。

当 validator 应用于具有组 Default 和 Special 的 Person 实例时,仅验证 Pet 的属性“name”,但不验证属性“furColor”:

ValidatorFactory validatorFactory = Validation
.buildDefaultValidatorFactory();
Validator validator = validatorFactory.getValidator();
validator.validate(person, Default.class, Special.class);

有没有办法让 validator 检查 HibernateProxy 的委托(delegate)实例的所有约束,而不是代理本身的所有约束?

我特别要求配置/修改 validator 以获得正确的结果。在我的情况下,无法更改 Hibernate 映射以防止 ORM 创建代理。

最佳答案

javax.validation.constraints 中的注释未声明为@Inherited,因此在您的情况下它们不会被继承。

参见 - http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Inherited.html

您可以创建自己的验证注释,这些注释将被继承。

关于java - Hibernate Validator 不检查代理子类的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com