5

インターフェイスに注釈を付ける方法を知りたい

@Entity
@Table(name = "FOLDER_TABLE")
public class Folder implements Serializable, Hierarchy {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name = "folder_id", updatable = false, nullable = false)
   private int fId;

   @Column(name = "folder_name")
   private String folderName;

   @OneToMany(cascade = CascadeType.ALL)
   @JoinTable(name = "FOLDER_JOIN_FILE_INFORMATION_TABLE", joinColumns = 
{ @JoinColumn(name = "folder_id") }, inverseJoinColumns = 
{ @JoinColumn(name = "file_information_id") })
    private List< Hierarchy > fileInformation = new ArrayList< Hierarchy >();
}

上と下は Hierarchy と呼ばれるインターフェイスを実装する 2 つのクラスです。フォルダー クラスには、フォルダーまたはファイル情報クラスである Hierarchyies のリストがあります。

@Entity
@Table(name = "FILE_INFORMATION_TABLE")
public class FileInformation implements Serializable, Hierarchy {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "file_information_id", updatable = false, nullable = false)
  private int ieId;
  @Column (name = "location")
  private String location;
}

何らかの方法で注釈または回避策を求めて Web を検索しましたが、単にこれであるインターフェイスをマップできません

public interface Hierarchy {

}

フォルダのある階層のリストでマッピング例外が発生しますが、クラスを正しくマッピングする方法がわかりません。

4

2 に答える 2

11

継承階層の一部として、Hibernate でインターフェイスをマップできます。これは、特にHibernate リファレンス の第 9 章で説明されているように、XML マッピングで確実に可能です。

ただし、注釈ベースのマッピングは別の話です。私はあまり詳しくありませんが、Java Persistence with Hibernateにはこの例も含まれています。あなたのケースに合わせて、それは次のようになります

@MappedSuperclass
public interface Hierarchy {
}

@Entity
@Table(name = "FOLDER_TABLE")
public class Folder implements Serializable, Hierarchy { ... }

@Entity
@Table(name = "FILE_INFORMATION_TABLE")
public class FileInformation implements Serializable, Hierarchy { ... }

このマッピングは、暗黙的なポリモーフィズムを持つ具体的なクラスごとにテーブルを使用します。

ただし、他のソースは、インターフェイスの注釈サポートがまだ機能していないか、安定していない可能性があることを示唆しています。

したがって、継承マッピング戦略の変更、インターフェイスを抽象クラスに変更するなど、実験が必要になる場合があります (可能であれば、クラスは単一の基本クラスしか拡張できないため)...

于 2010-04-06T21:29:23.750 に答える
1

少しグーグルが現れた...

インターフェイスを内部で使用できますが 、 hibernateでインターフェイスをマップすることはできません。xml マッピングまたは注釈マッピングを使用しているかどうかに関係なく、クラスをマップする必要があります。休止状態は永続オブジェクトのライフサイクルを処理しているため、インスタンス化するクラスを知る必要があるため、この情報を提供する必要があります...あなたが提案するものがどのように見えるかさえわかりませんか? 実行時にインスタンス化するために休止状態にする特定のインターフェイスの実装をどのように提供しますか?

http://forum.springsource.org/showthread.php?t=67420

だからあなたは運が悪いようです。

于 2010-04-06T17:05:32.943 に答える