Я использую аннотированный 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;
}
}
Простым изменением будет изменение типа от "Данные" до "HbnData", но это, очевидно, нарушит реализацию интерфейса и, таким образом, сделает абстракцию невозможной.
Может кто-нибудь объяснить мне, как реализовать это так, чтобы он работал с Hibernate?