我正在使用带注释的 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/