我有一个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
发生时抛出异常
由于
答案 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()来强制插入数据呢?