私は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でサポートされていない可能性があります。
レシピは主キーのおかげで成分を繰り返すことはできません。なぜユニークな名前の制約を使用するのではなく、プライマリキーを使用するかを知りたいのですが、 – GuidoMB
わかりません。おそらく、重複または不要な制約を検出するのに十分なほどスマートです。 –