我有一个带有字符串集合的实体。我想添加一个约束来检查集合中所有项目的大小是否小于255。
假设我有一个实体Area
,其中包含references
的集合。我想确保所有引用都短于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<>();
....
答案 0 :(得分:2)
这样注释
@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)。
有关类似问题,另请参见此answer。
答案 1 :(得分:1)
根据how-to-limit-the-column-length-while-using-collection-of-primitive-type,您可以将大小约束设置为Column注释。
答案 2 :(得分:0)
对于验证,您可以从Bean验证API(JSR 303)中添加类似@Size(max=allowed_length)
的约束。
Hibernate使用Bean验证约束来生成准确的数据库模式。 例如:
@Size.max
导致varchar(max)
的{{1}}定义,
Strings
导致列检查(例如值<= max)