2012-05-10 7 views
0

私はHibernateのUserTypeを拡張するClobTypeを持っています。期待どおりのことを行います。データベース内のclobをStringに変換します。私はclob列をClobTypeにマップしました。それらの列はJSPページでアクセスするときれいにレンダリングされます。Hibernate:カスタムUserTypeの値を設定する方法

しかし、私は値を設定しようとしているので、私は困惑しています。私は私のJSPページで${myObject.longField}が私に語っ書くことができますので、私はおそらく

String s = myObject.getLongField().toString(); 

を言うとロングフィールドの型がClobTypeであるという事実にもかかわらず、文字列を取得することができます。

私が知りませんがセッターを使用する方法です。私はClobTypeを簡単にインスタンス化することができますが、それをblobとして保持する必要がある文字列データをどのように与えますか?

ClobType clobType = new ClobType(); 
String s = "... a really REALLY long string ..."; 
/* a miracle occurs */ 
myObject.setLongField(clobType); 
myObjectDAO.saveOrUpdate(myObject); 

ClobTypeに文字列値を与えるために必要な奇跡は何ですか?

または、2つのセッターがClobTypesではなくStringsを返すように、より適切な(またはより適切な)方法がありますか?これを行う特別なマッピングはありますか?ビジネスロジックでは、特定の列がBLOBとして実装されているかどうかを知る必要はありません。

答えて

1

合理的に現在の休止状態を使用している場合は、カスタムUserTypeを使わずにJava StringをデータベースCLOBにマップすることができます。

はロングフィールドだけString

@Lob 
public String getLongField() { return longField; } 

を試してみてください。

これが機能すれば、実行しているよりもはるかに簡単になります。

+0

ポインタありがとうございます。しかし、私は注釈を使用していないので、私はそれをどのように "翻訳"するのか分かりません。 – Marvo

+0

xmlでもそれを行う方法があるかもしれませんが、私は翻訳を正しく理解していません。 –

+0

あなたは何を知っていますか?私は間違いなくこれをすべて「正しい」方法でやっていました。今日私のマッピングファイルからポーズを再生成したとき、これらのclobフィールドのテストが壊れました。理由はマッピングがそこにあったからですが、POJOのフィールドは文字列として定義されていました。そして、Hibernateはまさにそれを魔法のように扱います。 – Marvo

関連する問題