1

パブリッシャー オブジェクトを表す「クラス」タグを使用した休止状態のマッピングがあります。パブリッシャー フィールドの 1 つは、非常に長い説明です (最大 30k 文字)。最大4k文字のオラクルvarcharフィールドを使用しているため、説明を8つの異なるフィールドに分割する必要があります(varcharフィールドタイプを使用する必要があります)。このデータベースの複雑さを隠したくないので、発行元オブジェクトに説明フィールドを 1 つだけ設定します。

これまでに見つけた唯一の方法は、休止状態で「トランジット」オブジェクトを8つの説明フィールドにマップし、1つの説明のみで最終的な発行元オブジェクトにその場で手動でコピーできるようにすることです。

誰でもそれを行うためのより良い方法がありますか?

4

2 に答える 2

0

Hibernate のカスタム UserTypes を使用して、列を「魔法のように」単一の値に結合できると思います。

一部のドキュメントのこのセクションでは、テーブルからデータを取得する際に 2 つの列を組み合わせてカスタム通貨クラスを作成する方法について説明しています。それはあなたを始めるかもしれません。

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html#types-custom

私は個人的にこれを使用してデータベースからブロブをロードしていますが、うまく機能し、 UserType を記述してデータベース マッピングにマップすると、コードはデータベース内の実際の物理型について「認識」さえしません。

于 2012-06-07T18:28:16.760 に答える
0

単一の値に 8 つのフィールドを使用するのは本当に見苦しいですが、とにかく...

オブジェクトを休止状態にします。また、オブジェクトはカプセル化を使用します。エンティティにパブリックメソッドgetDescription()setDescription()メソッドを提供し、これらのメソッドが 8 つのプライベート フィールドとの間で説明を結合/分割するようにします。

public String getDescription() {
    return join(desc1, desc2, ..., desc8);
}

public void setDescription(String description) {
    String[] s = split(description);
    desc1 = s[0];
    ...
    desc8 = s[7];
}
于 2012-06-07T18:28:54.577 に答える