Я использую annoted, в спящем режиме, и я задаюсь вопросом, возможно ли следующее.
Я должен настроить серию интерфейсов, представляющих объекты, которые могут быть сохранены, и интерфейс для основного класса базы данных, содержащего несколько операций для сохранения этих объектов (... API для базы данных).
Ниже этого я должен реализовать эти интерфейсы и сохранить их с, в спящем режиме.
Таким образом, я буду иметь, например:
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);
}
Но когда я реализую класс, я могу следовать за интерфейсом, как ниже, и добраться, ошибка от В спящем режиме, говоря, что это не знает класс "Данные".
@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", но это, очевидно, повредит интерфейсную реализацию и таким образом сделает абстракцию невозможной.
Кто-либо может объяснить мне, как реализовать это способом, что это будет работать с, в спящем режиме?
Интерфейс, который я обычно использую, - это Data Access Object, или DAO. Используя Java generics, я могу написать его всего один раз; Hibernate позволяет написать реализацию тоже всего один раз:
package persistence;
import java.io.Serializable;
import java.util.List;
public interface GenericDao<T, K extends Serializable>
{
T find(K id);
List<T> find();
List<T> find(T example);
List<T> find(String queryName, String [] paramNames, Object [] bindValues);
K save(T instance);
void update(T instance);
void delete(T instance);
}