Spring Hibernate Bean验证@valid

时间:2015-02-28 18:07:45

标签: java spring hibernate validation spring-mvc

我知道这个论坛不是新问题,但我很困惑,我该怎么做。

问题:我正在使用spring mvc + hibernate开发一个应用程序。对于服务器端验证,我在控制器中使用@valid annotation,在bean中使用@ null和@notNull注释。

e.g

public class User implements Serializable {

    private static final long serialVersionUID = 2158419746939747203L;

    @Id
    @Column(name="USER_ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long userId;

    @Column(name="USERNAME", unique = true)
    @NotEmpty @NotNull @Size(min=6, max=20)
    private String username;

    @Column(name="PASSWORD")
    @NotEmpty @NotNull @Size(min=6, max=20)
    private String password;

此验证发生得很好,数据也在DB中保存。

但我想使用没有任何验证器类的注释来验证唯一约束,参照完整性和其他约束。

有可能吗?如果不是,那么最好和最简单的方法是什么(编码较少)?如果框架会为我做这件事,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

Saurabh,

对于表中的唯一约束,

 @Id

您还可以通过hibernate注释强制执行引用完整性 例如。

@OneToOne(mappedBy = "foo")

这是一个示例帖子

Referential integrity with One to One using hibernate

这是一个非常详细的教程,也在探索相同的内容:

http://www.journaldev.com/2882/hibernate-tutorial-for-beginners-using-xml-annotations-and-property-configurations

你可以写一个" CustomUniqueConstraintValidator"有点像

中提到的

http://www.journaldev.com/2668/spring-mvc-form-validation-example-using-annotation-and-custom-validator-implementation

您还可以将注释中的参数传递给自定义验证器。 例如

@CustomValidDate("columnName")

创建适用于任何字段/列的泛型类 你可以写一个通用的自定义验证器 2.使用annotaiton参数(在每个类属性上)传入表名和列名。 3.然后在验证器中,您可以使用表名,列名来应用验证逻辑(唯一等)。

谢谢, 保罗