Hibernate存储空字符串会在DB中创建空白区域。

时间:2012-06-25 16:43:55

标签: java hibernate sybase

我使用sybase db和hibernate作为ORM工具, 我正在处理Person对象,其中包含名称为String变量, 我在db端使用了varchar数据类型 当我创建人物的对象

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

这很好用

但是当我在名称中放入空字符串时,它会在db中创建空格。

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

为什么会这样?

非常感谢任何建议。

2 个答案:

答案 0 :(得分:4)

它的数据库填充增加了空格,与hibernate无关。

参考

Manual link

“Adaptive Server将条目截断为指定的列长度而不发出警告或错误,除非您将string_rtruncation设置为on。有关详细信息,请参阅”参考手册“中的set命令。空字符串”“或”“存储为因此,“abc”+“”+“def”等同于“abc def”,而不是“abcdef”。“

你可以做的两件事:

  • 让您的应用程序显式插入NULL(这是什么 它应该这样做,因为空字符串不等于NULL)
  • 在该表(或多个表)上放置一个插入/更新触发器 截取空字符串并将其转换为NULL

答案 1 :(得分:1)

Empty是一个字符串值,而hibernate认为它是一个值为空的字符串所以它会创建它。你可以检查“”.equals(..),这意味着java将“”视为一个值。