mol*_*man 5 java annotations hibernate jpa 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 >();
}
Run Code Online (Sandbox Code Playgroud)
上面和下面是两个实现名为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;
}
Run Code Online (Sandbox Code Playgroud)
我已经在网上搜索了一些注释或解决方法,但我无法映射界面就是这个
public interface Hierarchy {
}
Run Code Online (Sandbox Code Playgroud)
我在带有文件夹的层次结构列表上获得了映射异常,但我不知道如何正确映射类.
Pét*_*rök 11
您可以在Hibernate中映射接口,作为继承层次结构的一部分.使用XML映射肯定是可行的,正如Hibernate参考的第9章中所描述的那样.
然而,基于注释的映射是一个不同的故事.我对它并不熟悉,但是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 { ... }
Run Code Online (Sandbox Code Playgroud)
此映射将使用具有隐式多态性的每个具体类的表.
但是,其他来源表明对接口的注释支持可能尚未正常工作/稳定:
@Entity,其中还包括一些补丁,因此,您可能需要进行实验,包括更改继承映射策略,可能将接口转换为抽象类(如果可能的话 - 因为类只能扩展单个基类)...
谷歌搜索出现了一点……
您可以在内部使用接口,但 不能在 hibernate 中映射接口,您必须映射类,无论您使用的是 xml 映射还是注释映射。hibernate 正在处理持久对象的生命周期,因此它需要知道要实例化哪个类,因此您需要向它提供此信息...我什至不确定您的建议会是什么样子?您将如何提供给定接口的实现以在运行时休眠以实例化?
http://forum.springsource.org/showthread.php?t=67420
所以看来你运气不好。