Я встречаю некоторые проблемы с genericDao и интерфейсом модели.Generic Hibernate Dao с объектом модели интерфейса
Я реализовал следующую GenericHibernateDao:
@Repository
public abstract class GenericHibernateDao<T, PK extends Serializable> implements IGenericDao<T, PK> {
@Autowired
private SessionFactory sessionFactory;
private Class<T> type;
@SuppressWarnings({ "unchecked", "rawtypes" })
public GenericHibernateDao() {
Type t = getClass().getGenericSuperclass();
ParameterizedType pt = (ParameterizedType) t;
type = (Class) pt.getActualTypeArguments()[0];
}
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
@Transactional
public T add(T obj){
getSession().persist(obj);
return obj;
}
@Transactional
@SuppressWarnings("unchecked")
public T getById(PK id){
T result = (T) getSession().load(type, id);
return result;
}
@Transactional
@SuppressWarnings("unchecked")
public List<T> list(){
Criteria crit = getSession().createCriteria(type);
return (List<T>) crit.list();
}
...
Это работает прекрасно для "нормальных" объектов.
Я пытаюсь использовать интерфейс как тип T (например: IBattery):
public class BatteryDao extends GenericHibernateDao<IBattery, Integer> implements IBatteryDao {
}
-
public interface IBattery {
public int getId();
public double getLevel();
public void setLevel(double _level);
}
-
@Entity
public class SimulationBattery implements IBattery {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(unique = true, nullable = false)
private int id;
@Column(unique = false, nullable = false)
private double level;
@Override
public int getId() {
return id;
}
@Override
public double getLevel() {
return level;
}
@Override
public void setLevel(double _level) {
level = _level;
}
Я IBattery через создании экземпляра Spring ApplicationContext файл для загрузки реализации SimulationBattery. Он работает упорствовать, список (с критериями), но не в состоянии с «GetByID» причиной нагрузки, отправка:
org.hibernate.MappingException: Unknown entity: ***.***.****.IBattery
Это правое дело только реализация (SimulationBattery) отображается в hibernate.cfg.xml, но я не Не понимаю, почему я могу добавить, перечислить, но не загружать ... У кого-то есть объяснение?
спасибо.
Fabien.
(я использую Hibernate, Spring и Java8)
Благодарим вас за разъяснение. Итак, наконец, я должен перезаписать инъекцию SpringMVC и вручную сделать это. Это так расстраивает ... – MilacH