2

次のようなセットを含むエンティティがあります。

@ElementCollection
Set<String> branches;

Hibernateが行うことは、テーブルproject_branches(project_id | branchs)を作成し、に一意性制約を追加することbranchesです。一意の制約に両方を含める必要があることを休止状態に伝える方法はありproject_id ます branchesか?

私はこの問題の最初ではないと思いますが、この質問に対する答えを見つけることができませんでした...ありがとう

4

2 に答える 2

2

これは、マッピングに関係する列によって異なります。

もう1つの構成があります。UniqueConstraint以下のように、エンティティレベルで注釈を追加することを検討してください。

  @Table(name="project_branches",
    uniqueConstraints = {@UniqueConstraint(columnNames={"project_id", "branches"})}
  )

編集:@CollectionTable注釈を使用してみてください。

 @ElementCollection
 @CollectionTable(
    name="project_branches",
    joinColumns=@JoinColumn(name="branches"),
    uniqueConstraints = {@UniqueConstraint(columnNames={"project_id", "branches"})}
  )
  Set<String> branches;
于 2012-10-29T14:14:42.623 に答える
2

解決策を見つけました。エンティティフィールドはアノテーションをサポートしているので、次の@CollectionTableように解決できました。

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "project_branches", uniqueConstraints = @UniqueConstraint(columnNames = {
        "project_id", "branches" }))
Set<String> branches = new HashSet<String>();
于 2012-10-29T14:57:39.983 に答える