Я использую аннотированный Hibernate, и мне интересно, возможно ли следующее.
Мне нужно настроить ряд интерфейсов, представляющих объекты, которые могут быть сохранены, и интерфейс для основного класса базы данных, содержащий несколько операций для сохранения этих объектов (... API для базы данных).
Ниже я должен реализовать эти интерфейсы и сохранить их с помощью 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);
}
Но когда я реализую класс, я могу следовать интерфейсу, как показано ниже, и получить сообщение об ошибке от Hibernate, говорящее, что он не знает класс «Данные».
@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», но это, очевидно, нарушило бы реализацию интерфейса и, таким образом, сделало бы абстракцию невозможной.
Может ли кто-нибудь объяснить мне, как реализовать это так, чтобы он работал с Hibernate?