0

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

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

这很好用

但是当我在名称中放入空字符串时,它会在数据库中创建空白。

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

为什么会这样?

任何建议将不胜感激..

4

2 回答 2

4

它是添加空白的数据库填充,与休眠无关。

指的是

手动链接

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

你可以做两件事:

  • 让您的应用程序显式插入 NULL(这是应该做的,因为空字符串不等于 NULL)
  • 在该表(或表)上放置一个插入/更新触发器,该触发器拦截空字符串并将其转换为 NULL
于 2012-06-25T16:50:51.167 回答
1

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

于 2012-06-25T16:50:13.140 回答