如何为集合项添加约束
How to add constraint to collection items
我有一个包含字符串集合的实体。我想添加一个约束来检查集合中的所有项目是否都小于 255。
假设我有一个包含 references
集合的实体 Area
。我想确保所有参考文献都短于 255 个字符。你知道我怎样才能实现它吗?
@Entity
@Table(name = "AREA")
public class Area Serializable {
private static final long serialVersionUID = -4756123949793458708L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Integer id;
@ElementCollection
@CollectionTable(name = "AREA_REFERENCES", joinColumns = @JoinColumn(name = "AREA_ID"))
@Column(name = "REFERENCE", nullable = false)
@Size(max = 255) // THIS ANNOTATION SEEMS TO NOT WORK
private Set<String> references = new HashSet<>();
....
根据 how-to-limit-the-column-length-while-using-collection-of-primitive-type,您可以将大小约束设置为列注释。
对于验证,您可以从 Bean 验证 API (JSR 303) 添加类似 @Size(max=allowed_length)
的约束。
Hibernate 使用 Bean Validation 约束来生成准确的数据库模式。
例如:
@Size.max
导致 varchar(max)
定义 Strings
和
@Min, @Max
导致列检查(如值 <= 最大值)
这样注释
@Size(max = 255)
private Set<String> references;
表示Set<String>
最多允许包含255个字符串。
当然这不是你想要的。
相反,您希望每个字符串最多包含 255 个字符:
您可以通过在 < >
中注释类型参数来实现它,如下所示:
private Set<@Size(max = 255) String> references;
为此,您需要全新版本的 Hibernate Validator (6.0.x)
和 Bean 验证 (2.0.1).
对于类似的问题,另请参阅此 。
我有一个包含字符串集合的实体。我想添加一个约束来检查集合中的所有项目是否都小于 255。
假设我有一个包含 references
集合的实体 Area
。我想确保所有参考文献都短于 255 个字符。你知道我怎样才能实现它吗?
@Entity
@Table(name = "AREA")
public class Area Serializable {
private static final long serialVersionUID = -4756123949793458708L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
private Integer id;
@ElementCollection
@CollectionTable(name = "AREA_REFERENCES", joinColumns = @JoinColumn(name = "AREA_ID"))
@Column(name = "REFERENCE", nullable = false)
@Size(max = 255) // THIS ANNOTATION SEEMS TO NOT WORK
private Set<String> references = new HashSet<>();
....
根据 how-to-limit-the-column-length-while-using-collection-of-primitive-type,您可以将大小约束设置为列注释。
对于验证,您可以从 Bean 验证 API (JSR 303) 添加类似 @Size(max=allowed_length)
的约束。
Hibernate 使用 Bean Validation 约束来生成准确的数据库模式。 例如:
@Size.max
导致 varchar(max)
定义 Strings
和
@Min, @Max
导致列检查(如值 <= 最大值)
这样注释
@Size(max = 255)
private Set<String> references;
表示Set<String>
最多允许包含255个字符串。
当然这不是你想要的。
相反,您希望每个字符串最多包含 255 个字符:
您可以通过在 < >
中注释类型参数来实现它,如下所示:
private Set<@Size(max = 255) String> references;
为此,您需要全新版本的 Hibernate Validator (6.0.x) 和 Bean 验证 (2.0.1).
对于类似的问题,另请参阅此