与hibernate注释的接口

时间:2010-04-06 16:40:46

标签: java hibernate jpa annotations gilead

我想知道我如何能够注释界面

@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的接口的类,文件夹类有一个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;
}

我已经在网上搜索了一些注释或解决方法,但是我无法映射这个简单的界面

public interface Hierarchy {

}

我在带有文件夹的层次结构列表上获得了映射异常,但我不知道如何操作 正确地映射班级。

2 个答案:

答案 0 :(得分:10)

您可以在Hibernate中映射接口,作为继承层次结构的一部分。使用XML映射肯定是可行的,正如Chapter 9 of the Hibernate reference中所描述的那样。

基于注释的映射虽然是另一回事。我对它并不熟悉,但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 { ... }

此映射将使用具有隐式多态性的每个具体类的表。

但是,其他消息来源表明接口的注释支持可能尚未正常工作/稳定:

因此,您可能需要进行实验,包括更改继承映射策略,可能将接口转换为抽象类(如果可能的话 - 因为类只能扩展单个基类)...

答案 1 :(得分:1)

一个小小的谷歌搜索出现了......

  

您可以在内部使用接口但是   你不能在hibernate中映射接口,   你必须映射类,不管是什么   是否使用xml映射或   注释映射。休眠是   处理持久性的生命周期   对象所以它需要知道什么类   实例化所以你需要提供   这个信息给了它......我不是   甚至可以肯定你的建议   甚至会是什么样的?你好吗?   为给定的提供实施   在运行时到hibernate的接口   实例

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

所以看起来你运气不好。