0

ORMツールとしてsybasedbとhibernateを使用しています。文字列変数として名前を含むPersonオブジェクトを扱っています。Personのオブジェクトを作成するときにdb側でvarcharデータ型を使用しました。

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

これは問題なく動作します

しかし、名前に空の文字列を入れると、dbに空白が作成されます。

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

なぜこれが起こっているのですか?

アドバイスをいただければ幸いです。

4

2 に答える 2

4

空白を追加するデータベースのパディングであり、休止状態とは関係ありません。

を参照

マニュアルリンク,

"Adaptive Server は、string_rtruncation を on に設定しない限り、警告やエラーなしで指定されたカラム長にエントリを切り捨てます。詳細については、リファレンス マニュアルの set コマンドを参照してください。空の文字列 "" または '' は、代わりに単一のスペースとして格納されます。したがって、"abc" + "" + "def" は、"abcdef" ではなく、"abc def" と同等です。"

あなたができる2つのこと:

  • アプリケーションに明示的に NULL を挿入させます (空の文字列は NULL と同等ではないため、これはアプリケーションが行うべきことの一種です)。
  • 空の文字列をインターセプトしてNULLに変換するそのテーブル(またはテーブル)に挿入/更新トリガーを配置します
于 2012-06-25T16:50:51.167 に答える
1

Empty は文字列値であり、hibernate は値が空の文字列であると考えて作成します。java が "" を値として扱うことを意味する "".equals(..) を確認できます。

于 2012-06-25T16:50:13.140 に答える