在我的oracle数据库中,我有一个名为PERSON的表,其中包含列代码,姓氏,名字。
例如。 'PER001', '________________', 'Bob'
(注意:_ =空格)
surname设置为NOT NULL,但您可以输入一串空格,例如“”。
我遇到了问题,因为当Ibatis将此列映射到Object时,它将其映射为NULL!何时应将其映射为“”?
有什么想法吗?
答案 0 :(得分:2)
好的,我已经弄明白了!我没想到ibatis生成的setter会修剪字符串! > _>
在:
public void setSURNAME(String SURNAME) {
this.SURNAME = SURNAME == null ? null : SURNAME.trim();
}
FIX:
public void setSURNAME(String SURNAME) {
this.SURNAME = SURNAME == null ? null : SURNAME;
}
感谢帮帮!对不起> _>!
答案 1 :(得分:0)
将空字符串视为NULL是Oracle的一个怪癖。这在某些方面存在争议(在http://www.google.co.uk/search?q=oracle+null+“空+字符串”上搜索谷歌搜索)。 Oracle可能会在将来更改此行为。只是不要屏住呼吸。
修改强>
正如已经指出的那样,它不是一个空字符串,而是一串空白。那么,在这种情况下,它不是Oracle本身。
SQL> desc emp
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME NOT NULL VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> insert into emp (empno, ename) values (9999, ' ')
2 /
1 row created.
SQL> select length(ename) from emp
2 where empno = 9999
3 /
LENGTH(ENAME)
-------------
6
SQL>
可能的罪魁祸首是:
将TRIM()
应用于{。}的触发器
有问题的列(或类似的
处理)
IBATIS以某种方式介入
答案 2 :(得分:0)
这是在回避这个问题,但您可以选择其他字符串,例如“ - ”或“_”来表示缺失值吗?
根据被处理的空字符串的不同,被处理的空字符串与软字符串的所有部分的空字符串不同,似乎风险很大。
答案 3 :(得分:0)