2011-10-27 6 views
0

私は、オブジェクトをハイバネートに格納する必要があるプロジェクトで作業しており、多くのユーザー定義オブジェクトで構成されています。私は、 "ususal"型(int、Stringなど)を含むオブジェクトでhibernateマッピングを使用する方法を知っていますが、カスタム型を使用しています。注釈@embeddedの使用やUserTypeの実装などの提案を見ましたが、オブジェクト内のオブジェクトを特定のテーブルに単純にマッピングする方法に関する提案は見られませんでした。注:これらのオブジェクトは、同じデータベース内の同じテーブルにはありません。私は何をしたい私のDaoImplementationでこの機能を可能にするマッピングを持っている:Hibernateをカスタムフィールドで使用する方法異なるDBにマップするタイプ?

public void store(MyObject o){ 
hibernateTemplate.saveOrUpdate(o); 
} 

これは私のオブジェクトがどのように見えるかのソフトです:

public class MyObject{ 

private String name; 

private ObjectA type;//Contains an int 

private ObjectC look;//Contains a String. 

private ObjectB[] children;//contains a string and other children. 

public MyObject(){} 

//Getters and setters omitted. 

} 

public class ObjectB{ 
private String name; 
private ObjectB[] children; 

public ObjectB(){} 
//Getters setters omitted 
} 

答えて

1

このオブジェクトは別のテーブルに格納する必要がある場合、このオブジェクトは別の永続エンティティである必要があります。エンティティ間の関連付けを使用する必要があります:OneToMany、ManyToOne、OneToOne、ManyToMany。

hibernate reference manualをお読みください。

+0

私はこれを試してきましたが、問題が1つあります。子供は親を保管するフィールドを持たなければならないのですか?この例を見てください:http://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example/ それは良く見えますが、StockにはいくつかのStockDailyRecordsがありますが、StockDailyRecordにはStockが必要ですフィールド。私には醜いと思われ、私の現在のプロジェクトでは、クラスにフィールドを追加することはできません。周りの仕事のアイデア?マニュアルに誰も見ていない。 –

+0

子オブジェクトは親を持つフィールドを持つ必要はありません(もちろん、それらがマップされているテーブルには親IDの列が必要です)。親クラスのone-to-many関係をinverseとして指定しないでください。 – socha23

+0

@why_vincent:あなたが望むものは単方向のOneToMany関係です。マニュアルにはそのような関係の例があります。注意深くお読みください。 –

0

あなたはクラスの通常のエンティティのマッピングを記述する必要がありますObjectBに(同じ方法でMyObjectをマッピングする)、それをあなたが選んだテーブルにマッピングし、MyObjectとObjectBの間に1対多の関係を定義します。 saveOrUpdateは、渡されたオブジェクトとそのすべてのフィールドを保存するため、ObjectBの配列も保存されます。

ObjectTypeまたはObjectCについては、UserTypeを実装するか、@Embeddedとしてマークするか(フィールドをMyObjectフィールドと同じテーブルに入れたい場合)、別のテーブルにエンティティとしてマップすることができます(ObjectBの場合)。

+0

彼らは同じテーブルに属していないので、私はUserTypeを使用する必要がありますが、見栄えの良い休止状態のコードは、私の意見では見栄えが悪くなり、Spring/JDBCを使用する可能性があります。 –

+0

同じテーブルに属していない場合は、UserTypeを書くことに問題はありません。すべてのオブジェクトを別のテーブルにエンティティとしてマップし、関係を指定してください。 – socha23

関連する問題