1

ジェネリック サービス、dao レイヤー用の genericService サポート クラス (genericService、GenericServiceImpl、GenericDao、GenericHibernateDao) があります。

通常は正常に動作します。抽象的な汎用サービスから任意のタイプのパラメーター化されたサービスを拡張すると、この拡張サービスを別のサービスで拡張すると、次のようになります。

原因: java.lang.ClassCastException: java.lang.Class を java.lang.reflect.ParameterizedType にキャストできません

エラー。

私の GENericHibernateDao:

@Transactional パブリック抽象クラス GenericHibernateDaoSupport extends HibernateDaoSupport implement GenericDaoTemplate { プライベート クラス タイプ;

public GenericHibernateDaoSupport() {
    this.type =  (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

@Autowired
@Qualifier(value = "productSessionFactory")
 public void bindSessionFactory(SessionFactory sessionFactory)
{
    setSessionFactory(sessionFactory);
}

public Class<T> getType() {
    return type;
}

public void setType(Class<T> type) {
    this.type = type;
}

protected Session getCurrentSession() {
    return getHibernateTemplate().getSessionFactory().getCurrentSession();
}

public ID persist(T newInstance) {
    return (ID) getHibernateTemplate().save(newInstance);
}

public void update(T transientObject) {
    getHibernateTemplate().update(transientObject);
}

これが私の標準拡張 HibernateDao クラスです。

@Repository
public class StandadHibernateDao extends standardHibernateDaoSupport<Standard, Long> implements StandardDao {

上記の拡張操作は正常に機能しますが、次のようなことを試したとき:

@Repository
public class ExtendStandardGatewayHibernateDao extends StandadHibernateDao implements ExtendedStandardDao {

それはスローします:

原因: java.lang.ClassCastException: java.lang.Class を java.lang.reflect.ParameterizedType にキャストできません。

何か考えはありますか?

4

1 に答える 1