我想知道我如何能够注释界面
@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 {
}
我在带有文件夹的层次结构列表上获得了映射异常,但我不知道如何操作 正确地映射班级。
答案 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 { ... }
此映射将使用具有隐式多态性的每个具体类的表。
但是,其他消息来源表明接口的注释支持可能尚未正常工作/稳定:
@Entity
注释有一个相关的open bug report,其中还包含一些补丁,因此,您可能需要进行实验,包括更改继承映射策略,可能将接口转换为抽象类(如果可能的话 - 因为类只能扩展单个基类)...
答案 1 :(得分:1)
一个小小的谷歌搜索出现了......
您可以在内部使用接口但是 你不能在hibernate中映射接口, 你必须映射类,不管是什么 是否使用xml映射或 注释映射。休眠是 处理持久性的生命周期 对象所以它需要知道什么类 实例化所以你需要提供 这个信息给了它......我不是 甚至可以肯定你的建议 甚至会是什么样的?你好吗? 为给定的提供实施 在运行时到hibernate的接口 实例
http://forum.springsource.org/showthread.php?t=67420
所以看起来你运气不好。