5

このJPAモデルを実装しようとしています:

  • クラスOwnerEntity. @Embeddedclass のインスタンスがありますAbstractParent
  • クラスAbstractParent@Embeddableです。これは抽象クラスで、このクラスには 2 つの子があります。子は具象クラスです。

例外は次のとおりです。Cannot instantiate abstract class or interface: AbstractParent

(1) コンポーネントの継承が必要なようですが、(2) JPA ではコンポーネントの継承は許可されておらず、(3) Hibernate では実装されていませんでした。(1)、(2)、(3)が正しいことを確認していただけますか? それらが正しい場合、アドバイスや回避策を提供できますか? hibernate-jpa 2.0、hibernate-core 3.5.1、hibernate-core-annotations 3.2.0 を使用しています。

4

2 に答える 2

3

なぜこの実装が必要なのかという質問に答えるために、以下に例を示します。データベーステーブルにはコンピューターに関する情報があり、コンピューターにはモニターがあり、モニターがLCDの場合、パラメーターは「ピクセル」です。モニターがテレビの場合、そのパラメーターは「回線」です。すべてのモニターには、パラメーター「重量」もあります。このテーブルのデータ構造には、id、RAM、monitor_indicator、重量、ライン、ピクセルが含まれます。

このデータ構造は、クラスで実装できます。

  • クラスComputer{id、RAM、ディスプレイ}
    • パソコンに関する情報を掲載しています。
  • 抽象クラスAbstractDisplay{重み}
    • ディスプレイに関する一般的な情報が含まれています。
  • クラスLCDDisplay{pixels} はクラスを継承しますAbstractDisplay
    • LCD固有の情報(ピクセル)があります。
  • クラスTVDisplay{lines} はクラスを継承しますAbstractDisplay
    • TV 固有の情報 (ライン) があります。

基本的な考え方は、メイン クラス (Owner/Computer) が別のクラス (Parent/AbstractDisplay) を埋め込み、埋め込みクラスのタイプに応じて異なるパラメーター セットを持つことができるというものです。

埋め込み抽象クラスをインスタンス化する方法について: JPA で抽象クラスをインスタンス化するのと同じ方法: 上記の例では、「monitor_indicator」は使用する必要がある子クラスを示します。このフィールドは、クラス Computer がインスタンス化されている間存在する必要があります。

于 2011-08-08T14:25:33.373 に答える
-1

クラスを埋め込むAbstractことは論理的な意味を持ちませんAbstract。特定の実装ではなくクラスを埋め込む必要があると考える理由について、ロジックを作り直す必要があります。Abstract

于 2011-08-08T00:37:55.557 に答える