これは従来のデータベース用です。子テーブルの列が親テーブルのPKを保持していても、この関係の2つのデータベーステーブルには外部キー制約はありません。JPAは、データベース内に外部キー制約のないエンティティ間の@OneToManyマッピングをサポートしていますか?
子テーブルが適切な列に外部キー制約を持たない場合、JPAは@OneToManyマッピング(双方向または一方向)をサポートしていますか?
これは従来のデータベース用です。子テーブルの列が親テーブルのPKを保持していても、この関係の2つのデータベーステーブルには外部キー制約はありません。JPAは、データベース内に外部キー制約のないエンティティ間の@OneToManyマッピングをサポートしていますか?
子テーブルが適切な列に外部キー制約を持たない場合、JPAは@OneToManyマッピング(双方向または一方向)をサポートしていますか?
短い回答:はい。
ロングワン:データベースがすでに存在する場合、JPAは実際に外部キーを気にしますか? JPAプロバイダにデータベーススキーマを作成する作業を残すと、外部キーが作成されてしまいます。しかし、JPAが既存のデータベースで動作する場合、JPAは外部キーと主キー列の存在のみを考慮して適切な結合を生成します。外部キーは必要ありません。
実際に私がHibernateと作業していた間に、short
タイプの外部キー列を使用して他のテーブルのint
プライマリキーを指すレガシーデータベースがありました。外部キーはありませんでしたが、validate
hbm2ddl
オプションを使用しない限り、JPAプロバイダとしてのHibernateは外部キーがないことはもちろんのこと、型の不一致を無視してうまく動作していました。
@ org.hibernate.annotations.ForeignKey(name = "none")//このバグがhttps:///hibernate.atlassian.net/browse/HHH-8805は修正されました。 –
@JonasElfström、@ org.hibernate.annotations.ForeignKey(name = "none")でのアプローチは、Hibernate 4.3.9では機能しません –
さらに: @ org.hibernate.annotations.ForeignKeyを持つHibernate 4.3.Xの注釈フィールド(name = "none")私のために働いたことがありませんでした。 しかし、注意してください:双方向関係の場合は、**の2つのフィールドに注釈を付ける必要があります**注釈アノテーションによって! –
このレガシーコードでは、OpenJPA 1.0.1を使用しています。OneToManyの作業をすべて行うには、子エンティティを読み込む必要があります。これが外部キー制約の欠如に起因するのか、openjpa 1.0.1がちょうど脳死であるのかが私は分かりません。 –
http://stackoverflow.com/questions/27040735/jpa-association-without-foreign-key/27042157 –