現在、Netbeans プロジェクトを Glassfish サーバーにデプロイするときに BUILD FAILED エラーの問題が発生しています。ログから次のエラーが表示されます。
例外の説明: エンティティ クラス [class entity.InstrumentExtRef] の注釈付き要素 [field instrument] の @JoinColumns が不完全です。ソース エンティティ クラスが複合主キーを使用する場合、@JoinColumns を使用して結合列ごとに @JoinColumn を指定する必要があります。name 要素と referencedColumnName 要素の両方を、そのような @JoinColumn ごとに指定する必要があります。詳細については、server.log を参照してください。
問題が発生しているテーブルは、instrument_ext_ref であり、instrument_id および instrument_code_type フィールドの複合主キーがあります。
問題があると思われるエンティティ クラス - InstrumentExtRef - には、次の宣言と注釈があります。
@EmbeddedId
protected InstrumentExtRefPK instrumentExtRefPK;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 16)
@Column(name = "reference")
private String reference;
@JoinColumn(name = "instrument_code_type", referencedColumnName = "code_type", insertable = false, updatable = false)
@ManyToOne(optional = false)
private InstrumentCodeType instrumentCodeType1;
@JoinColumn(name = "instrument_id", referencedColumnName = "id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Instrument instrument;
@EmbeddedId の詳細 (InstrumentExtRefPK) を含むエンティティ クラスは次のようになります。
@Embeddable
public class InstrumentExtRefPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "instrument_id")
private int instrumentId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 10)
@Column(name = "instrument_code_type")
private String instrumentCodeType;
クラス InstrumentCodeType は、主キー code_type (参照される列) を持つテーブル instrument_code_type を参照します。クラス Instrument は、列 "id" (参照される列) と列 "exchange_exchange_code" で構成される複合主キーをそれ自体が持つテーブルinstrument を参照します。
エラー メッセージから、InstrumentExtRef エンティティの複合主キーが問題であることは明らかですが、他の同様の (ただしまったく同じではない) 問題の調査に基づいて、エンティティ クラスは問題ないように見えます。しかし、私はこれに比較的慣れていないため、何かが欠けている可能性があります。