Hibernate Data Exception没有到来

时间:2013-07-25 03:38:08

标签: java hibernate hibernate-mapping

我有一个POJO课程如下,

Public class RateUp{
int id;
String rate;
}

并在hbm文件中,

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

在数据库中,费率列的数据类型为字符,长度为 4

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

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

即使字符串的长度超过定义,也没有例外。

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

由于

2 个答案:

答案 0 :(得分:0)

毕竟这个长度是数据库中的字符串长度。相应的jpa为this

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

我认为hibernate validator无论你在寻找什么,都有@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);

答案 1 :(得分:0)

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