集合中字段的唯一约束

时间:2017-07-24 15:35:36

标签: hibernate-validator

是否可以进行此验证:

class Man {

@Unique
String name;
}

class Order {
@Valid
List<Man> manCollection;
}

其中唯一逻辑是:集合manCollection中的每个项都是唯一的。

1 个答案:

答案 0 :(得分:0)

您可以通过添加包含订单列表的Customer类来使此代码段不明确:

class Man {
  @Unique
  String name;
}

class Order {
  @Valid
  List<Man> manCollection;
}

class Customer {
  @Valid
  List<Order> orderCollection;
}

然后,人们无法知道Man对象在给定订单内或给定客户(或两者)内是否必须是唯一的。

因此,无论Bean Validation API允许什么,我都不会认为使用这种确切的语法是可能的。

您可以做的是将注释移至manCollection,例如@UniqueMen List<Man> manCollection;,并实施ConstraintValidator<List<Man>>

如果它对您有用,您甚至可以制作更通用的@UniqueContent注释,但这会复杂得多。您需要将目标类型作为参数(@UniqueContent(target = Man.class))传递,并编写一个验证程序,用于解析target方法中initialize类的注释。但是要小心使用一些缓存机制,因为注释解析非常慢。