2016-04-14 16 views
0

私は、誰かが私が休止状態で抱えている問題を見つけ出すのを助けることを願っています。インターフェイスとHibernateの関連付け

私はさまざまな種類のエンティティを請求することができる請求システムに取り組んでいます。エンティティは、「請求可能な」インタフェースを実装します。私の請求書クラスで

私はinvoiceableインターフェースは、私はこの

組織を実行したときに、私は例外を取得しています。この

@MappedSuperclass 
public interface Invoiceable 
{ 
// Name to display as entity responsible 
String getInvoiceOwnerName(); 

// Get email address to send invoice 
String getInvoiceOwnerEmail(); 
} 

のように見えます

@ManyToOne(fetch = FetchType.EAGER) 
private Invoiceable responsibleEntity; 

このラインを持っています。 hibernate.AnnotationException:models.Invoice.responsibleEntityの@OneToOneまたは@ManyToOneは未知のエンティティを参照しています:interfaces.Invoiceable

私はグーグルで試してみましたが、同様の記事を読んでみましたが、何もできません。 Hibernateはこのタイプのマッピングをサポートしていますか?

ありがとう

答えて

1

これを行うには、休止状態で継承を使用する必要があります。詳細は、 - >Hibernate Inheritance Doc

追加情報: Hibernateは、データベーステーブルがない場所でタイプを結合することができません。これはあなたにとってどういう意味ですか? MappedSuperclassesにはテーブルがないので、一緒に配線することはありません。だから、これはビジネスではありません。最も重要な点を覚えておいてください。すべての親オブジェクトの読み取りを要求するとき。彼はどのテーブルに参加すべきですか?これが、冬眠の継承システムが遊びに来る理由です。インターフェイスを通常のクラスに変更する必要があります。これは大した問題ではありません。選択した継承ストラテジーを選択します。それぞれに長所と短所があります。あなたの状況に最も適しているかどうかを知るには、文書をお読みください。

以下は、Invoiceクラスを使用した単一テーブルアプローチの例です。

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(
    name="invoiceType", 
    discriminatorType=DiscriminatorType.STRING 
) 
@DiscriminatorValue("Invoice") 
public class Invoiceable { ... } 

@Entity 
@DiscriminatorValue("CustomInvoice") 
public class CustomInvoice extends Invoiceable { ... } 
+1

ここで重要な点を要約できますか?スタックオーバーフローは、一般的に他のリソースへのリンクではない回答を歓迎しません。また、リンクが壊れることもあります。 –

+0

@ mh-devこの文書で読んだことがありましたが、インターフェイスの使用方法はわかりません。実際には、アノテーションではインターフェースがサポートされていないと言われています。私の団体は同じ基本クラスに由来していないので、私はどのようにこれを行うことができるのか分かりません。私は別の方法を見つける必要があります。 – FMC

+0

答えを拡張しましたが、継承戦略はパフォーマンスに影響を与えます。したがって、慎重に文書をお読みください。 –

関連する問題