Java/Hibernate 在实体上使用接口(interface)

标签 java hibernate interface

我正在使用带注释的 Hibernate,我想知道以下是否可行。

我必须设置一系列表示可以持久化的对象的接口(interface),以及一个用于包含多个用于持久化这些对象的操作的主数据库类的接口(interface)(...数据库的 API)。

在此之下,我必须实现这些接口(interface),并使用 Hibernate 持久化它们。

所以我会有,例如:

public interface Data {
  public String getSomeString();
  public void setSomeString(String someString);
}

@Entity
public class HbnData implements Data, Serializable {
  @Column(name = "some_string")
  private String someString;

  public String getSomeString() {
    return this.someString;
  }
  public void setSomeString(String someString) {
    this.someString = someString;
  }
}

现在,这可以正常工作了。 当我想要嵌套实体时,麻烦就来了。 我想要的界面非常简单:

public interface HasData {
  public Data getSomeData();
  public void setSomeData(Data someData);
}

但是当我实现这个类时,我可以按照接口(interface),如下所示,并从 Hibernate 得到一个错误,说它不知道类“Data”。

@Entity
public class HbnHasData implements HasData, Serializable {
  @OneToOne(cascade = CascadeType.ALL)
  private Data someData;

  public Data getSomeData() {
    return this.someData;
  }

  public void setSomeData(Data someData) {
    this.someData = someData;
  }
}

简单的更改是将类型从“Data”更改为“HbnData”,但这显然会破坏接口(interface)实现,从而使抽象变得不可能。

任何人都可以向我解释如何以与 Hibernate 一起工作的方式实现它吗?

最佳答案

也许是 OneToOne.targetEntity?:

@OneToOne(targetEntity = HbnData.class, cascade = CascadeType.ALL)
private Data someData;

关于Java/Hibernate 在实体上使用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2799365/

相关文章:

java - 为什么 Maven 在我使用 Spring-Data 时添加依赖的 Hibernate Jars

performance - Delphi 中接口(interface)对执行速度有什么影响?

java - 基本 Java 接口(interface)在实现该接口(interface)的类中返回对象

sockets - 使用 ServerSocket 绑定(bind)已使用的端口时,Java 7 不会抛出 BindException

java - 静态 block 与静态方法 - 初始化静态字段

java - 在 DispatcherServlet 中未找到带有 URI 的 HTTP 请求的映射 - 上下文组件扫描不起作用

java - 无法编译已实现接口(interface)的抽象类

Jaunt Webcrawler 上的 Java Android Studio 空指针异常

java - 空对象模式是否违反了接口(interface)隔离原则?

java - 数据库连接mysql和Spring框架