1

1が他のものの親である2つのエンティティを作成する適切な方法は何ですか?我々はEmailOutboxSchedule内の指定した日に外出EmailOutboxにすぐに出て行く電子メールや電子メールを持っている、Hibernate内のエンティティ階層

Email_Outbox 
------------ 
Id 
Email_Id 
Date_Sent 

Email_Outbox_Schedule 
--------------------- 
Id 
Email_Id 
Date_Sent 
Date_to_Send 

非常にシンプル:たとえば、私たちは、以下の2つのテーブルを持っています。理想的には、これはJavaのクラス階層で、EmailOutboxScheduleEmailOutboxに拡張されています。次に、1つの追加フィールド、dateToSendを指定するだけでよく、一般的なオブジェクト階層機能を利用できます。休止状態でこれを行うのに問題はありますか?特別な方法で2つのエンティティに注釈を付ける必要がありますか?

答えて

0

this documentで行くソリューションは、@MappedSuperclassを親クラスEmail_Outboxに使用し、次に2つの子クラスScheduled_Email_OutboxとImmediate_Email_Outboxを持つことです。

Immediate_Email_Outboxは、@Entity注釈以外は空白になります。

空のクラスはほとんどエレガントではありませんが、それはうまくいくようです。

+0

これは動作しますが、必要な階層は表しません。しかし、それは妥当な解決策です(たとえば、nullの可能なスケジュール列を持つことなど)。 –

+0

休止状態とエレガンスに関する非常に面白いコメント:)。これは最も理にかなっているようです。それは間違いなく私の意見でnull可能なスケジュールの列を持つよりも良いです。 –

2

おそらく約Hibernate inheritance mappingを読む必要があります。しかし、論理的には、そのスケジュールは受信ボックスを拡張するものではありません。スケジュールは個々のメッセージの特性であるといっても聞こえます。したがって、単一のメッセージエンティティ上にnullableプロパティdate to sendが存在する可能性がありますか?

+1

+1 "継承階層ではない" –

+0

すぐに外出する必要のあるメールの場合はdateToSendをnullにすることができますが、別のテーブルやクラスを使用する方がはるかに優れています。私はEmailOutboxScheduleがEmailOutboxのサブクラスであるかどうかについては同意しませんが、この具体例よりも、休止状態でオブジェクト階層を表現する適切なメカニズムについてより興味があります。 Hibernate継承マッピングへのリンクは、これと関係していないJIRAの問題です。私は検索し、マニュアルの第10章では継承マッピングについて説明していますが、実際にははるかに単純なもの、2つの別々のテーブル階層。 –

+0

間違ったリンクの謝罪、私のタブのクリップボードに詰まっている必要があります。修正されました。本当に階層を使用したいと思っていて、あなたが記述したテーブルを使用したい場合は、 'コンクリートクラスごとのテーブル'を考えてください。 –