Используя Hibernate 3.6.8.Final и Spring 3.0.5.RELEASE, я пытаюсь добавить некоторые общие функции DAO для классов, которые имеют несколько реализаций, переопределенных выше, для реализации определенных классов, однако это не работает для DetachedCriteria.
Пример:
В базовом классе:
public interface ICat {
public void setMeowSound(String meow);
public String getMeowSound();
}
Тогда каждый унаследованный проект будет определять аннотации гибернации.
например,
@Entity
@Table(name="SQUAWKY_CATS")
public class SquawkyMeowingCat implements ICat, Serializable {
@Id
@Column(name="SQUAWK_NAME")
private String meow;
public String getMeowSound() {
return meow;
}
public void setMeowString(String meow) {
this.meow = meow;
}
}
Это означает, что я могу использовать:
Criteria criteria = Session.createCriteria(ICat.class);
И Spring / Hibernate знает, что он извлекает аннотации для ICat из конкретного наследования в конкретном проекте.
Однако, если я пытаюсьсделать:
DetachedCriteria subQuery = DetachedCriteria.forClass(ICat.class,"inner"); // etcetera
затем я получаю неизвестную сущность во время выполнения для ICat.
Теперь это имеет смысл, так как в первом случае создается его вне сеанса, поэтому он имеет всю конфигурациючто ему нужно, тогда как DetachedCriteria является статическим методом, однако он выдает ошибку при попытке выполнить
criteria.list()
, когда он выбрал сеанс и должен знать, чтоНа самом деле ICat - это SquawkyMeowingCat, в котором есть все аннотации.
Итак, мои вопросы состоят из двух частей:
1) Является ли это известным поведением и навсегда останется таким же?2) Кто-нибудь может придумать простой способ обойти это без использования интерфейса и конкретного ClassHolder, который возвращает экземпляр класса, который ему нужно создать?