java - 与 hibernate 注解的接口(interface)

标签 java hibernate jpa annotations gilead

我想知道我如何能够注释一个接口(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/

相关文章:

java - 带有一些逻辑的 JPQL 查询

java - 模态对话框存在异常

java - 无法创建新 session 。 (原始错误: 'java -version' failed.错误:spawn ENOENT)

java - 在 Java 9 模块中找不到 Derby 驱动程序

java - Hibernate 多对多关联 : left hand side collection contains elements, 但右侧集合为空

spring - 如何使用jpa或hibernate防止表被删除

java - Vaadin 主视图

java - 当一个表与 hibernate 中的另一个表链接时更新该表中的列

java - 从 hibernate 中获取查询的执行时间

java - 同一实体上的 JPA OneToOne 和 OneToMany