2011-07-07 9 views

答えて

3

外部キーで使用される列の名前を指定する場合は、@JoinColumn注釈と@ManyToOne注釈を使用して、外部キーを作成するために使用される列の名前を指定できます。 @JoinColumn注釈のname属性の値は、JPAプロバイダによって使用され、表の列名をエンティティの属性にマップします。

ただし、作成された外部キー制約の名前は設定できません。これを書いている時点では、ORマッピングファイル内のJPAアノテーションまたは構成パラメータを使用して外部キー制約の名前を指定することはできません。外部キー制約の名前を変更する必要がある場合は、JPAプロバイダに依存するのではなく、DDL文を自分で作成する必要があります。

+3

実装固有の解決策が存在するかもしれませんが、例えばHibernateは@ForeignKeyアノテーションを持っています。 – snorbi

+0

@borjabの答えをチェックすると、もう一つの方法があります。 – hectorg87

3

JPA 2.1以降では、@ForeignKey注釈で外部キーを定義することができます。

残念ながら、名前を変更するだけではあまり役に立ちません。 FKのカスタム名を指定する場合は、FKのSQL定義も指定する必要があります。それは少なくともEclipseLink 2.5.0で動作する方法です。

4

JPA 2.1を使用すると、ちょうどforeignKey annotationでこれを行うことができます。

import javax.persistence.ForeignKey; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 

@ManyToOne 
@JoinColumn(name = "company_id", nullable = false, foreignKey = @ForeignKey(name="FK_COMPANY__ROUTE")) 
private Company company; 

を私は@ForeignKeyが@JoinTablesでは動作しませんか私にはわからないと思いますdeprecated hibernate equivalent

+0

これは私が探していた答えです、ありがとう、私はManyToMany関係で動作させることができませんでしたが、ManyToOneでは魅力的に機能します。 – hectorg87

0

と混同しないでください私は@ JoinTable-> foreignKeyと@ JoinColumn-> foreignKeyでそれを試してみた

関連する問題