1

私のOracleデータベースには、列code、surname、forenameを持つPERSONというテーブルがあります。

例えば。'PER001', '________________', 'Bob' (注: _ = スペース)

surname は NOT NULL に設定されていますが、" " のようなスペースの文字列を入力できます。

Ibatis がこの列をオブジェクトにマップすると、NULL としてマップされるため、これに問題があります。" " としてマッピングする必要があるのはいつですか?

何か案は?

4

4 に答える 4

2

私はこれを理解しました!Ibatis が生成したセッターがストリングをトリミングしているとは思いませんでした! >_>

前:

public void setSURNAME(String SURNAME) {
    this.SURNAME = SURNAME == null ? null : SURNAME.trim();
}

修理!:

public void setSURNAME(String SURNAME) {
    this.SURNAME = SURNAME == null ? null : SURNAME;
}

助けてくれてありがとう!すみません>_>!

于 2009-09-08T11:02:17.170 に答える
0

空の文字列を NULL として扱うのは、Oracle の癖の 1 つです。これは一部で物議をかもしています ( http://www.google.co.uk/search?q=oracle+null+ "empty+string" でグーグル検索してみてください)。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>

考えられる原因は次のとおりです。

  1. 問題の列にa を適用するトリガーTRIM()(または同様の処理)

  2. なんらかの方法で介入するIBATIS

于 2009-09-08T10:54:51.947 に答える
0

これは問題を回避していますが、「-」や「_」など、欠落した値を示す別の文字列を選択できますか?

ソフトウェアスタックのすべての部分で、空の文字列が空の文字列とは異なるように扱われることに依存することは、かなり危険に思えます。

于 2009-09-08T10:57:02.113 に答える
0

ここで発散 ;)

http://forums.thedailywtf.com/forums/t/1225.aspx?PageIndex=1

于 2009-09-08T10:58:01.237 に答える