4

リストタイプがインターフェイスの場合、マッピングの作成に問題があります。抽象クラスを作成し、識別子列を使用する必要があるようですが、これは本当ですか?抽象クラスには抽象メソッドが含まれているだけなので、そうする必要はなく、インターフェイスを保持したいだけです。

私はそれをアカウントと呼ぶことができるインターフェースを持っています

public interface Account {
 public void doStuff();
}

これで、AccountOverSeasAccountとOverDrawnAccountの2つの具体的な実装者ができました。

public class OverSeasAccount implements Account {
 public void doStuff() {
   //do overseas type stuff
 }
}

public class OverDrawnAccount implements Account {
 public void doStuff() {
   //do overDrawn type stuff
 }
}

Work withaListというクラスがあります

private List<Account> accounts; 

私は弁別子フィールドを見ていますが、これは抽象クラスに対してのみ実行できるようです。これは本当ですか?どんなポインタでもありがたいです。インターフェイスにディスクリミネーターを使用できますか?

4

2 に答える 2

2

インターフェイスをマッピングのスーパータイプにすることは可能だと思います。ただし、注釈を使用できない場合があります。注釈は xml 構成ファイルでうまく機能するため、必要なマッピングを使用してプロジェクトに hibernate 構成ファイルを追加する必要がある場合があります。ただし、プロジェクトの残りの部分で注釈を保持できます。

この問題では、それについて詳しく説明します。誰が知っているので、注釈を使ってそれを行う方法に関する提案で終わるようです。今のところxmlの方が安全であることをお勧めします。ドキュメントのこのページでは、必要なxmlマッピングについて説明しています。

于 2008-11-12T01:07:38.273 に答える
1

インターフェイスを削除せずに抽象クラスを導入することもできます。

// not an entity
public interface Account {
    public void doStuff();
}

@Entity
public abstract class BaseAccount {
    public void doStuff();
}


@Entity
public class OverSeasAccount extends AbstractAccount {
    public void doStuff() { ... }
}

@Entity
public class OverDrawnAccount extends AbstractAccount {
    public void doStuff() { ... }
}
于 2008-11-11T19:28:42.733 に答える