6

Oracle 11GR2 を使用していますが、varchar2 フィールドが空の場合、空のフィールドで a を実行すると、Eclipse コンソールSystem.out.printlnに表示されます。null代わりに空の文字列を表示するにはどうすればよいですか?

4

3 に答える 3

6

ゲッターでトリックを行うことは問題ありませんが、モデルの望ましい動作を変更するようなものです。

私のコメントで引用されているように、Oracle には空の文字列と null を区別する方法がありません。使用しているすべての文字列属性が決してnullにならないことが確実な場合は、次のように休止状態でインターセプターを作成できます

public class EmptyStringInterceptor extends EmptyInterceptor {
   @Override
   public boolean onLoad(Object entity, 
                         Serializable id, 
                         Object[] state, 
                         String[] propertyNames,
                         Type[] types) {
      for (int i = 0; i < types.length; i++) {
         if (StringType.equals(types[i]) && state[i] == null) {
               state[i] = "";
         }
      }
      return true;
   }
}

インターセプターの使用については、Hibernate のドキュメントを参照してください。

于 2013-01-10T06:42:37.953 に答える
3

あなたのゲッターメソッド:

public String getVarchar2()
{
    if(this.varchar2==null)
        return "";
    else
        return this.varchar2;
}
于 2013-01-10T06:09:34.463 に答える
2

すべての文字列の動作を変更したい場合は、インターセプターが最適です。Oracle は内部的に空の文字列を null ( '' is nulltrue を返す) として扱いますが、これは他のデータベースには当てはまらない場合があります。それらについては、データベースで使用しないようにメソッドonFlushDirtyとメソッドもオーバーライドする必要があります(または、必要に応じて常に使用する必要があります)。onSavenull

public class MPSessionInterceptor extends EmptyInterceptor {

    @Override
    public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, 
            Object[] previousState, String[] propertyNames, Type[] types) {
        return convertEmptyStrings(currentState, types);
    }

    @Override
    public boolean onSave(Object entity, Serializable id, Object[] state,
            String[] propertyNames, Type[] types) {
        return convertEmptyStrings(state, types);
    }

    @Override
    public boolean onLoad(Object entity, Serializable id, Object[] state, 
            String[] propertyNames, Type[] types) {
        return convertEmptyStrings(state, types);
    }

    private boolean convertEmptyStrings(Object[] state, Type[] types) {
        // convert nulls to empty strings
        boolean modified = false;
        for (int i=0; i<state.length; i++)
            if ((types[i] instanceof StringType) && state[i] == null) {
                state[i] = "";
                modified = true;
            }
        return modified;
    }

}

インターセプターの使用については、Hibernate のドキュメントを参照してください。

于 2014-11-18T07:08:33.580 に答える