0

我有一个 POJO 类如下,

Public class RateUp{
int id;
String rate;
}

在 hbm 文件中,

<property name="rate" column="RATE" type="string" length="4"/>

数据库中rate列的数据类型为字符,长度为4

当我按如下方式保存数据时,

Rateup obj = new Rteup();
obj.setRate("444444");
session.saveorupdate(obj);

即使字符串的长度比定义的长,也不例外。

发生transaction.commit时它会抛出DATAEXCEPTION但我希望休眠在saveorupdate发生时抛出异常

谢谢

4

2 回答 2

0

毕竟该长度将是数据库中的字符串长度。对应的jpa就是这个

因此,如果您将长度设置为 4 并保存长度为 5 的字符串,则只会保存 4 个字符,其余字符将被丢弃。这不是 hibernate 在保存期间管理的东西,它只是数据库列定义。因此,如果字符串超过预期的长度,数据库会剪切您的字符串。保存后,转到 db,您应该会看到 4 个字符,而不是 5 个。您还可以定义长度 = 4 的列

我认为hibernate验证器可以做任何你想要的,有@Size注释。检查参考。

如果您使用验证,它将类似于:

    Public class RateUp{
      int id;
      @Size(min = 0, max = 4)
      String rate;
    }

    Rateup obj = new Rteup();
    obj.setRate("444444");

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<Rateup>> constraintViolations = validator.validate(obj);
    if(constraintViolations.size()>0){
     system.out.print(constraintViolations.iterator().next().getMessage());
    }
    session.saveorupdate(obj);
于 2013-07-25T03:47:00.463 回答
0

在提交事务之前,数据不会插入到数据库中。如果您确实希望在事务提交之前出现异常,那么使用 session.flush() 来强制插入数据呢?

于 2013-07-25T04:05:36.933 回答