我想知道我如何能够注释一个接口(interface)
@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 >();
}
上面和下面是2个类,它们实现了一个名为层次结构的接口(interface),文件夹类有一个层次结构列表,是一个文件夹或一个文件信息类
@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 {
}
我在带有文件夹的层次结构列表中遇到映射异常,但我不知道如何 正确映射类。
最佳答案
您可以在 Hibernate 中映射接口(interface),作为继承层次结构的一部分。正如 Chapter 9 of the Hibernate reference 中所描述的那样,这对于 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 { ... }
此映射将为每个具有隐式多态性的具体类使用一个表。
但是,其他来源表明对接口(interface)的注释支持可能尚未工作/稳定:
- 有一个相关的open bug report关于将
@Entity
注释与接口(interface)一起使用,其中还包括一些补丁, - 这是一个related (fairly old) thread ,描述了使用 XML 映射的解决方法。
因此您可能需要进行试验,包括更改您的继承映射策略,也许将接口(interface)变成一个抽象类(如果可能的话——因为一个类只能扩展一个基类)...
关于java - 与 hibernate 注解的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586583/