web-dev-qa-db-ja.com

JPA:@ManyToOneリレーションのデフォルトの列名マッピング

クラスがある場合:

@Entity
Order implements Serializable {
    @Id
    private Integer id;
    ...
}

そして:

@Entity
OrderLine implements Serializable {
    @Id
    private Integer id;

    @ManyToOne
    Order order;
    ...
}

プロパティorderは何にrow nameをマップしますか?

order_id, ORDER_ID or Order_id?

(@ JoinColumn(name = 'order_id')の省略は意図的です)

24
Kdeveloper

以下は、JPA 1.0仕様がJoinColumnアノテーションについて書いているものです。

9.1.6 JoinColumnアノテーション

...

name注釈要素は、外部キー列の名前を定義します。残りの注釈要素(referencedColumnName以外)はこの列を参照し、列注釈と同じセマンティクスを持っています。

単一の結合列があり、name注釈メンバーが欠落している場合、結合列名は次の連結として形成されます。参照関係プロパティーの名前または参照エンティティのフィールド。 "_";参照される主キー列の名前。エンティティにそのような参照関係プロパティまたはフィールドがない場合(つまり、結合テーブルが使用される場合)、結合列名は次の連結として形成されます。エンティティの名前。 "_";参照される主キー列の名前。

...

したがって、この例では、外部キー列のデフォルト名はorder_idになります。

参考文献

  • JPA 1.0仕様
    • 9.1.6項「JoinColumn注釈」
25
Pascal Thivent

あなたの質問が理解できないかもしれません。ただし、以下のようなものは必要ではありませんか?

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="order_id", nullable=false)
Order order;

ここにいくつかの例があります

24
Oscar Chan