Java 休眠数据异常不出现

Java 休眠数据异常不出现,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我有一个POJO课程,如下所示 Public class RateUp{ int id; String rate; } Rateup obj = new Rteup(); obj.setRate("444444"); session.saveorupdate(obj); 在hbm文件中 <property name="rate" column="RATE" type="string" length="4"/> 即使字符串的长度超过定义的长度,也不例外 当发生transactio

我有一个POJO课程,如下所示

Public class RateUp{
int id;
String rate;
}
Rateup obj = new Rteup();
obj.setRate("444444");
session.saveorupdate(obj);
在hbm文件中

<property name="rate" column="RATE" type="string" length="4"/>
即使字符串的长度超过定义的长度,也不例外

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


谢谢

这个长度毕竟是数据库中的字符串长度。与此对应的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);
Public class RateUp{
int-id;
@尺寸(最小值=0,最大值=4)
串速率;
}
Rateup obj=新Rteup();
目标设定值(“444444”);
ValidatorFactory=Validation.buildDefaultValidatorFactory();
Validator Validator=factory.getValidator();
设置constraintViolations=validator.validate(obj);
if(constraintViolations.size()>0){
system.out.print(constraintViolations.iterator().next().getMessage());
}
会话。保存或更新(obj);

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

rate
为int类型,如何设置字符串?java是惊奇的。在事务提交之前,post
saveorupdate
不会进入数据库,所以在提交时,dataexception来自数据库,这很有意义。由于您在db表中的列大小为4。当Transaction.commit发生时,它会引发DATAEXCEPTION,但我希望hibernate在saveorupdate发生时引发异常现在是谁引发数据异常?hibernate会引发DATAEXCEPTION,但在saveorupdate发生时它会引发,对吗。。?不是在委员会期间,不是的。我告诉你们,阅读我的帖子,Hibernate对长度不做任何事情,它所做的只是创建表,它创建的字符串列的长度为4。因此,只有db在保存时才会抛出它,而真正的保存是在提交事务时发生的。如何在保存或更新之前限制数据而不超过建议的长度?