2013-07-25 72 views
0

我有一個POJO類如下,休眠數據異常不來

Public class RateUp{ 
int id; 
String rate; 
} 

和HBM文件,

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

在數據庫中,速率列的數據類型爲字符和長度是

當我保存數據如下,

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

即使字符串的長度比定義長,也沒有例外。

transaction.commit發生它是扔DATAEXCEPTION,但我想冬眠拋出異常時saveorupdate發生

感謝

+1

'rate'是int類型的,你怎麼設置字符串? java想知道 – Elbek

+0

對不起編輯後 – user1321824

+0

'saveorupdate'不會去db直到事務提交,所以dataexception來自數據庫,當你提交,這是有道理的。由於在db表中你的列大小是4。 – Elbek

回答

0

該長度終究會在DATABSE字符串長度。對應的jpa爲this

所以,如果你讓長度= 4並保存長度爲5的字符串,那麼只會保存4個字符,其餘的將被扔掉。這不是hibernate在保存期間管理的東西,它只是數據庫列的定義。因此,如果數據庫超過預期的長度,數據庫會削減您的字符串一旦你保存它,去分貝,你應該看到4個字符,而不是5.你也可以列定義長度= 4

我認爲休眠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); 
+0

當tranaction.commit發生時,它正在拋出DATAEXCEPTION但我想休眠時發生saveorupdate發生時的異常 – user1321824

+0

誰現在拋出數據異常? – Elbek

+0

Hibernate正在拋出dataexception,但它應該在saveOrUpdate需要時拋出.. ..?不在提交 – user1321824

0

,直到事務被提交的數據不被插入到數據庫中。如果在事務提交之前確實需要異常,那麼使用session.flush()來強制插入數據呢?