我有这个Entity,这是一个父类(super class):

@Entity
public class Father implements Serializable{

    @Column(name = "name")
    @Size(min=1, max=10)
    @Pattern(regexp="^[A-Za-z ]*$")
    @NotNull
    private String name;

}

这一项,扩展了上面的一项:
@Entity
public class FatherSub extends Father implements Serializable{

    private String name;

}

如您所见,在FatherSub中,我没有@Annotations,也不需要它们。
如何覆盖它们?有办法吗?

注释@NotNull似乎保留在子类中,请我填写
在这两个Eclipse打印屏幕图片中可以看到Father.name(不是FatherSub.name)。

java - 如何在子类中重写@annotations(javax.validation)-LMLPHP
java - 如何在子类中重写@annotations(javax.validation)-LMLPHP

谢谢

最佳答案

带有子类的注释不能被覆盖,这些注释仅表示特定时间段内的一些元信息。因此,如何实现注释继承取决于实现。对于Validator Framework,分散在多个继承类上的注释是aggregated
在您的示例中,FatherSub#name成员隐藏了Father#name成员。这意味着FatherSub的所有实例将与name中定义的FatherSub一起使用。但是由于Validation实现还考虑了继承的批注,因此FatherSub#name没有@Column批注,因此会弹出错误。您无法更改此行为,因此必须选择完全不使用继承,或者为子类提供 validator 注释,而不是父类。
此外,您不需要在Serializable中显式实现FatherSub,因为Father已经实现了它。

关于java - 如何在子类中重写@annotations(javax.validation),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34358948/

10-12 04:06