2016-10-26 8 views
2

Hibernateでは、2つのクラス間に親子関係がありますが、子クラスはビュー、テーブルではありません。Hibernate @親としてテーブルを継承し、子として表示

今、問題は、Inheritance annotationを提供する必要があることです。それ以外の場合、Hibernateはデフォルト値を考慮し、存在しない "dtype"列を探します。

私は戦略(デフォルトはSINGLE_TABLE)としてTABLE_PER_CLASSを使用しようとしましたが、この場合、Hibernateは子クラスに関連付けられたビューで何らかの種類のユニオンを行います。存在しない列、つまりテーブルとビューの両方に存在する列については何らかの形で発生します。

これは、アノテーションの観点から適切にモデル化する方法か、あるいは、子を含む基礎クエリを生成せずに親エンティティを求める方法です。 (2番目の質問はhereを頼まれた私は、私はよりよい解決策を望んでいるので、まだ試すことを明らかにしなかった。。)

編集:より良い説明を示すために、ここにあるコードと同等の部分に私のセットアップ:

@Entity 
@Table(name = "PARENT") 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class ParentEntity implements Serializable { 
    // ... 
} 

@Entity 
@Table(name = "PARENT_VIEW") 
public class ChildEntity extends ParentEntity implements Serializable { 
    // ... 
} 
+0

一部のコードが役立ちます。 –

+0

私は読書を楽にするためにいくつかのコードを含んでいました;) – DanielM

+0

'ChildEntity'だけがあなたが持っていて、*がこれまで持っていた唯一のサブクラスであれば、' SELECT p FROM ParentEntity p WHERE TYPE(p)< > ChildEntity'。さもなければ、私はあなたが '@ MappedSuperclass'ソリューションなしでそれを行うことはできないと信じています。 –

答えて

0

私はモデリングを理解できません。なぜこれはこのようにしたのですか?

'子'が '親'テーブルのビューである場合、それは実際に子ではなく、モデルのようにモデル化されるべきではありません。

ビューが変更可能であっても(挿入が '親'テーブルなどに挿入されるなど)、これは基本的に単に休止状態があなたのために行うことです(「子」のクエリは効果的です'parent'要素のサブセットを生成する)。

このビュー構造では何を達成しようとしていますか、このようにモデル化する必要があるのはなぜですか?

解決方法は、これを親子関係としてモデル化しないか、single_tableのinheritancetypeを使用して、(注:hibernateで通常の親子関係を使用して)子からテーブル注釈を削除することです。

関連する問題