2017-10-02 25 views
0

JPA(hibernate、spring tool suite)を使用する私は2つのテーブルの列のうちの1つが外部キーであるために一意制約を作成しようとしています。私は構文を理解することはできません。JPAで外部キーに一意制約を設定する方法

試しました。

@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"company.companyId" , "state"})}) 
@Entity 
public class Branch { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int branchId; 
    @ManyToOne(optional = false) 
    private Company company; 
    @Column 
    int state; 
} 

が、私はエラーを取得:

database column 'company.companyId' not found. Make sure that you use the correct column name which depends on the naming strategy in use (it may not be the same as the property name in the entity, especially for relational types) 

ので、私は、このような "のcompany_id" と "company_company_id" と "company_companyId" など、いくつかの他の方法を、試してみました。それらのどれも働かない。

答えて

0

私は "company_company_id"を試しましたが、今は動作します。

制約が存在することに気付きにくいです。私はMSSMSを使用しており、 "Constraints"フォルダには表示されません。制約を適切に表示するには、「作成するスクリプトを作成する」必要があります。 HTH

+1

'@ UniqueConstraint'の' columnNames'は常にエンティティの関係/属性ではなく、物理テーブルの列を参照します。 'company_company_id'はおそらくJPA/HibernateがCOMPANYテーブルを作成したときに生成されたデフォルト名です。それを明確にするために' @ Column'アノテーション – Ish

+0

@lshでカラム名を明示的に指定していない限りです。私は "コードを最初に"やっていて、おそらく最善の選択ではなかった私のカラム(ergoはデフォルト名を取る)の名前を付けませんでした。 –

関連する問題