Сохранение интерфейса с Hibernate DAO - PullRequest
0 голосов
/ 07 июля 2019

У меня есть интерфейс 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?

...