2012-06-25 34 views
0

我使用SYBASE數據庫和Hibernate作爲ORM工具, 我處理Person對象,其中包含名稱爲字符串變量, 我已經使用VARCHAR數據類型的DB側 當我創建一個Person對象存儲空字符串的Hibernate在DB中創建空白空間。

Person p=new Person(); 
p.setName(null);  
session.saveOrUpdate(p); 

這工作正常

但是,當我把名字中的空字符串在db中創建空白。

Person p=new Person(); 
p.setName(""); 
session.saveOrUpdate(p); 

爲什麼會發生這種情況?

任何建議將不勝感激..

+0

您是否意味着當您讀取Person對象時,名稱被設置爲「」(0x20)而不是「」 (空字符串)? – maksimov

+0

if(new String(「」)== null){System.out.println(「\」\「is equal to null」)} else {System.out.println(「\」\「不等於null「)}? – Mike

回答

4

它的數據庫填充添加了空白,與休眠無關。

指的

Manual link

「的Adaptive Server截斷項指定的列長度而不警告或錯誤,除非你設置STRING_RTRUNCATION。請參見參考手冊中的set命令獲取更多信息。該空字符串「」或「'存儲爲單個空格而不是NULL,因此」abc「+」「+」def「等同於」abc def「,而不是」abcdef「。

兩件事情你可以做:

  • 讓應用程序顯式插入NULL(這是什麼樣的 應該因爲空字符串做不等同於NULL)
  • 把一個插入/更新觸發該表(或多個表) 截取空字符串並將其轉換爲NULL
1

空是一個字符串值和Hibernate覺得喜歡它是空的,所以它會創建一個值的字符串。你可以檢查「」.equals(..)這意味着java將「」作爲一個值。