У меня есть интерфейс IExample для моего класса Example, который является сущностью Hibernate, потому что я хочу, чтобы мое приложение позволяло другим разработчикам изменять реализацию моего уровня модели.Мой интерфейс выглядит следующим образом:
public interface IExample {
public int getId ();
public void setId (int id);
public IOtherClass getOtherClass ();
public void setOtherClass (IOtherClass otherClass);
}
IOtherClass - это интерфейс для другого объекта Hibernate OtherClass.
Мой класс:
@Entity
@Table(name="example")
public class Example implements IExample {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToOne(targetEntity=OtherClass.class)
@JoinColumn(name="otherclass")
private IOtherClass otherClass;
}
Как видите, яЯ использую интерфейс IOtherClass и сопоставляю его с сущностью Hibernate с помощью
targetEntity=OtherClass.class
. Это прекрасно работает, но проблема возникает, когда я пытаюсь использовать DAO.Так как я работаю с IOtherClass в своем примере, я хотел бы иметь возможность сообщить моему спящему режиму, что при вызове:
Example example = new Example();
IOtherClass otherClass = example.getOtherClass(); // Returns IOtherClass
getCurrentSession().save(otherClass);
я не пытаюсь сохранить интерфейс, но мою сущность OtherClass.Если я пытаюсь сделать это, на самом деле, я получаю исключение:
Unable to locate persister: IOtherClass
Один из вариантов - явное приведение каждой сущности IOtherClass, которую мой DAO получает к OtherClass, но это небезопасно и не похоже налучший способ кодировать это.
Мой вопрос: есть ли способ (с помощью аннотаций или что-то в этом роде) сообщить моим DAO, какой класс искать, когда они получают экземпляр IOtherClass?