2010-12-01 4 views
4

マップへのマッピング:製品材料(A、B、C(のは、X、Y、Zとしてそれを名前を付けてみましょう)、 ...)。すべての製品には、この製品を製造するためにどのような材料が必要かを示すレシピがあることが知られています。例えば、1つのXを生成するには、2a、6c、および4d(X = 2a + 6c + 4d)が必要です。休止状態:多対多のは次の二つのエンティティに私が扱うアプリケーションを開発してい

それはデータベース表に反映方法は次のとおり

Products 
id INT 
name VARCHAR 
... 

Materials 
id INT 
name VARCHAR 
... 

Recipes 
product_id INT 
material_id INT 
count INT 

第3テーブル内のフィールドは、(例えば2から6、4)同じ種類の材料の係数が「カウント」。

だから私は、Productクラスをこのように構成したい:

public class Product { 
    ... 
    private Map<Material, Integer> recipe; // How many units of each material we need? 
    ... 
} 

は、それは、Hibernateを使用したレシピ地図のために必要なすべてのデータを取得する方法ですか?別個の構成アプローチ(注釈なし)が好ましい。

+0

Hibernateのドキュメント(http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/)の例7.11(7.2.2.2項)のようなものを意味しましたか? –

答えて

8

誰もが注釈なしで解決策を掲載しないので、私はJPA 2.0 @ElementCollection注釈とソリューションを紹介しますが:

@ElementCollection 
@CollectionTable(name = "Recipes", 
    joinColumns = @JoinColumn(name = "product_id")) 
@MapKeyJoinColumn(name = "material_id") 
@Column(name = "count") 
private Map<Material, Integer> recipe; 

はまた、あなたのマップの値のクラスがIntegerであることから、注釈のない解決策がする可能性があることに注意してください「エンティティリレーションシップマッピング」ではなく、「コレクションマッピング」として文書化する必要があります。

関連する問題