3

@JoinColumns の仕組みを誤解しているだけかもしれませんが、name 属性を再利用するとエラーが発生します。しかし、name 属性はデータベースの列にマップされませんか? 再利用できないのでしょうか?

私が得ているエラーがあります:

Repeated column in mapping for entity: data.model.DP column: division

コード:

@Column(name = "division", nullable = false)
private String division;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumns({
    @JoinColumn(name = "division_labeldefintion", referencedColumnName = "labeldefinition"),
    @JoinColumn(name = "division", referencedColumnName = "abbr")
})
private LabelFile divisionLabel;

私がやろうとしているのは、1 つのテーブル (列を含む) から複数列の結合をdivision行い、それをテーブルと結合することLabelFileです。

4

2 に答える 2

14

マッピングで列を再利用したい場合はinsertable=false updatable=false、Hibernate がどの Java 参照値が関連するものであるかを知るために、列を としてマークする必要があります。

これらの属性をいつ使用するかの詳細については、この質問を参照してください。

于 2012-09-14T01:32:59.303 に答える
1

JoinColumn アノテーションを使用する場合、2 つのテーブル/エンティティ間の関連付けのタイプに応じて、属性「name」と「referencedColumnName」が参照先の場所を変更していることに注意する必要があります。JPA API を確認するか、ここで詳細な説明を参照してください。

あなたの場合、「divisonLabel」プロパティの JoinColumn の「name」属性は、ソース テーブル/エンティティを参照しています。また、「referencedColumnName」は、LabelFile テーブル/エンティティの列を参照しています。したがって、ソース テーブル/エンティティに 2 つの「分割」列を作成しようとしています。

マッピングを機能させるには、「name」と「referencedColumnName」の値を切り替えます。

于 2012-09-13T21:52:51.623 に答える