防止尝试存储超出VARCHAR2数据库字段容纳的更多文本的正确方法是什么?

假设REGISTRATIONS表的PARTNER_ROLE字段声明为VARCHAR2(80)。

此字段在Java的Registration类中映射为

public class Registration {
  @Column(name=”PARTNER_ROLE” length=”80”)
  private String partnerRole;
}


但是,setPartnerRole()方法允许用户填充任何长度的字符串。仅当随后尝试插入或更新REGISTRATIONS记录时,才会遇到此问题。甲骨文抱怨。

处理这种情况的正确方法是什么?

最佳答案

您可以使用JSR-303 Bean验证批注对字段进行最大长度的批注,然后可以使用验证程序来检查这些批注是否得到满足,例如当setter被调用时。这也可以用来自动为您提供有意义的错误消息。

public class Registration {
  @Size(max = 80)
  @Column(name=”PARTNER_ROLE” length=”80”)
  private String partnerRole;

  // you need to get this from somewhere, but this depends on your environment
  private ValidatorFactory validatorFactory;

  public Set<ConstraintViolation<Registration>> validate() {
    Validator validator = validatorFactory.getValidator();
    return validator.<Registration>validate(this);
  }
}

关于java - 如何对相关的Java字符串强制执行DB字段大小限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2744393/

10-12 04:19