JPAにおける関連関係マッピング(feat.repreated column in mapping for entity error)


-基本関連マッピング


我々は通常、JPAを使用して関連関係をマッピングする際に@ManyToOne(複数対1の関係であれば)と@JoinColumn言語を使用する.
例えば、User表とProduct表があるとする.
また、2つのテーブルを別のテーブルで複数のテーブルと多対一の関係にする場合は、次のように記述できます.
@ManyToOneは、テーブルが複数対1の関係であることを示します.
@JoinColumnを使用して、特定のテーブルのpkを外部キーとして宣言できます.
結果として生じるDDLは以下のようになります.

参照テーブルの列にはuser idとproduct idが含まれます.
2つのフィールドが設定されていることを外部キーで確認できます.
ここで注意したいのは、@JoinColumnのnameプロパティでは、キーのカラム名を簡単に参照するわけではありません.

-2つ以上のカラムが1つのテーブルを参照している場合。


を見てください.
1つのテーブルにはUserのテーブルがあり、2つの柱はProductのテーブルを参照してください.
この場合、上図のように@JoinColumn語種を設定して返すと以下のエラーが発生します.... Repeated column in mapping for entityの部分により,同じ色が2回マッピングされたと予測できる.

解決策


この問題を解決するためには, @JoinColumn言語テストの属性が何を意味するかを知る必要がある.- name:マッピングする外部キーの名前- referencedColumnName:外部鍵が参照するターゲットラベルのpk名
すなわち、上記のproduct idやuser idなどの実際のpk名は、name属性ではなくreferencedColumnName属性に書くべきである.
の説明に従って、以下の変更を行い、サーバを再起動します.
# 생성된 create 문

 create table exchange (
 	exchange_id bigint not null auto_increment, 
 	acceptor_confirm_yn bit not null, 
 	exchange_complete_dt datetime(6), 
 	exchange_complete_yn bit not null, 
 	requester_confirm_yn bit not null, 

	# 아래 4줄 주목!!
 	acceptor_id bigint not null, 
 	acceptor_product_id bigint not null, 

 	requester_id bigint not null, 
 	requester_product_id bigint not null, 
    
 	primary key (exchange_id))
以上のように,name属性で設定した名前にカラム名を設定し,DDLが生成されたと判断した.