Oracle 11GR2 を使用していますが、varchar2 フィールドが空の場合、空のフィールドで a を実行すると、Eclipse コンソールSystem.out.println
に表示されます。null
代わりに空の文字列を表示するにはどうすればよいですか?
質問する
9288 次
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 null
true を返す) として扱いますが、これは他のデータベースには当てはまらない場合があります。それらについては、データベースで使用しないようにメソッドonFlushDirty
とメソッドもオーバーライドする必要があります(または、必要に応じて常に使用する必要があります)。onSave
null
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 に答える