2015-07-20 2 views
0

Я реализовал хорошо известную общую картину дао с отражением (Кевин Бауэрсокс):Generic DAO и org.hibernate.MappingException: Неизвестный объект: java.lang.Object

public class NewBaseDaoImpl<T, ID extends Serializable> implements NewBaseDao<T,ID> { 

private Class<T> entity; 

@PersistenceContext(unitName = "orm-unit") 
private EntityManager em; 

@SuppressWarnings("unchecked") 
public NewBaseDaoImpl(){ 
    this.entity = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
} 

@Override 
public T read(ID id) { 
    return em.find(this.getEntity(), id); 
} 

Вставка данных работает нормально, но когда я попытаться найти объект по идентификатору, как так:

RepairShop rs = (RepairShop) bean.read(1L); 

я получаю:

java.lang.IllegalArgumentException: Неизвестный объект: java.lang.Object (org.hibernate.MappingExceptio n: Неизвестный объект: java.lang.Object)

Что не так?

ответ

0

Не видя подпись дочернего класса, я не могу точно знать, но может быть, что иерархия вашего типа слишком сложна, чтобы разрешить тип объекта, используя подход, который вы используете. Вы можете попробовать TypeTools вместо:

entity = (Class<T>)TypeResolver.resolveRawArgument(NewBaseDao.class, getClass()); 

Документы фактически включают в себя generic DAO example, а также.

Смежные вопросы