@UniqueConstraints не работает на @JoinTable - PullRequest
1 голос
/ 23 января 2012

Я использую Playframework 1.2.4 и PostgresSQL 9.1.2. У меня есть следующие объекты: Recipe и RecipeItem. Рецепт имеет набор RecipeItems. Я аннотировал набор предметов рецепта в классе Recipe следующим образом:

@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();

Но когда я проверяю PgAdmin, чтобы увидеть, применено ли ограничение к таблице RecipeItemForIngredients, я не могу его найти. Это то, что показывает 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)
)

У кого-нибудь есть идея, почему это может происходить? Возможно, эта аннотация не поддерживается ORM, используемым Playframework.

1 Ответ

1 голос
/ 23 января 2012

Это ограничение не имеет особого смысла, и у вас все равно есть более сильное ограничение по умолчанию:

CONSTRAINT recipeitemforingredients_recipeitemid_key UNIQUE (recipeitemid)

Если recipeItemId уникален, то, конечно, кортеж (recipeId, recipeItemId) также уникален.

Более того, поскольку PK таблицы равен (recipeId, recipeItemId), ограничение уже применяется ограничением PK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...