如何将Varchar的长度限制在2到100之间

时间:2018-12-25 10:49:07

标签: mysql spring

我在MySQL数据库中有一个表,该表的列名为“名称”。我希望每当有任何查询要在此列中存储名称时,名称的长度应为> 2且<= 100。

而且名称只能以字母开头。

我不想将此检查放在数据库表上。我要将这张支票放在代码中。

@Entity
@Table(name = "member")
public class Member implements Serializable{

  private static final long serialVersionUID = 9045098179799205444L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  Long id;

  @Column(name = "name")
  String name;

  @Column(name = "email")
  String email;

}

3 个答案:

答案 0 :(得分:1)

Validate it before the persistence with javax.validation.constraints.Size;
    @Size(min = 2, max = 200, message 
          = "name field must be between 2and 200 characters")
    @Column(name = "name")
      String name;

答案 1 :(得分:0)

有Bean验证批注,例如@Size和@Pattern。您可以使用它们注释所需的字段。 Here是这些注释的列表。

答案 2 :(得分:0)

  

我不想将此检查放在数据库表上。我要将这张支票放在代码中。

编辑:这篇文章是为那些不想使用注释并且如果您将实体视为' Datatable '的人而写的。如果您想要使用批注,则将下面的正则表达式与@Pattern annotation

一起使用

好吧,如果您不想将其存储在数据库中,则需要在POJO的服务层上方或在模型 Member 类内部进行处理。 。 取决于您对有或没有业务逻辑的POJO / DTO的看法。

检查本身就像

一样简单
public void setName(String name){
  Pattern pattern = Pattern.compile("^[A-Za-z].{1,100}");
  Matcher matcher = pattern.matcher(test);
  if(matcher.matches()){
    // save here
  }else{
    // handle error here (exception?!)
  }
}

此模式检查并判断字符串以字母字符开头,并且在字母字符后至少还有2个字符,第一个字符后最多可以有99个字符。