2012-01-23 1 views
0

私はPlayframework 1.2.4とPostgreSQL 9.1.2を使用しています。私は以下のエンティティを持っています:RecipeとRecipeItem。レシピには一連のレシピエントアイテムがあります。次のように私は、レシピクラスでレシピアイテムのセットを注釈付きました:@UniqueConstraintsが@JoinTableで動作しない

@Required 
@MinSize(1) 
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinTable(name = "RecipeItemForIngredients", 
joinColumns = @JoinColumn(name = "recipeId"), 
inverseJoinColumns = @JoinColumn(name = "recipeItemId"), 
uniqueConstraints = @UniqueConstraint(name = "uq_recipeItemPerRecipe", 
columnNames = {"recipeId", "recipeItemId"})) 
public Set<RecipeItem> items = Sets.newHashSet(); 

をしかし、私は制約がRecipeItemForIngredientsテーブルに適用されているかどうかを確認するためにpgAdminでをチェックしたとき、私はそれを見つけることができません。これはPgAdminが示すものです。

CREATE TABLE recipeitemforingredients 
(
    recipeid bigint NOT NULL, 
    recipeitemid bigint NOT NULL, 
    CONSTRAINT recipeitemforingredients_pkey PRIMARY KEY (recipeid, recipeitemid), 
    CONSTRAINT fk5ac547a883708db FOREIGN KEY (recipeid) 
     REFERENCES recipe (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk5ac547ad6e1da8f FOREIGN KEY (recipeitemid) 
     REFERENCES "recipe$recipeitem" (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT recipeitemforingredients_recipeitemid_key UNIQUE (recipeitemid) 
) 

これはなぜ起こっているのでしょうか?このアノテーションは、Playframeworkで使用されるORMでサポートされていない可能性があります。

答えて

1

この制約はあまり意味がない、とあなたはとにかく、デフォルトでは強い制約があります。

CONSTRAINT recipeitemforingredients_recipeitemid_key UNIQUE (recipeitemid) 

recipeItemIdがユニークである場合には、当然のことながら、タプル(recipeId, recipeItemId)もユニークです。

また、テーブルのPKは(recipeId, recipeItemId)であるため、制約はPK制約によって既に適用されています。

+0

レシピは主キーのおかげで成分を繰り返すことはできません。なぜユニークな名前の制約を使用するのではなく、プライマリキーを使用するかを知りたいのですが、 – GuidoMB

+0

わかりません。おそらく、重複または不要な制約を検出するのに十分なほどスマートです。 –

関連する問題