特に Hibernate を使用する DAO クラスの依存関係を配線するために Spring を使用していますが、困惑する例外が発生しています。
$Proxy58 は UserDao にキャストできません
私のDAOは次のように構成されています:
<bean id="userDao" class="com.domain.app.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
そして、次のようなインターフェイス、抽象基本クラス、および最終的な実装があります。
インターフェース:
public interface Dao {
public void save(Object object);
public Object load(long id);
public void delete(Object object);
public void setSessionFactory(SessionFactory sessionFactory);
}
抽象基本クラス:
public abstract class BaseDao implements Dao {
private SessionFactory sessionFactory;
@Transactional
@Override
public void save(Object object) {
PersistentEntity obj = (PersistentEntity) object;
currentSession().saveOrUpdate(obj);
}
@Transactional
@Override
public abstract Object load(long id);
@Transactional
@Override
public void delete(Object object) {
// TODO: this method!
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session currentSession() {
return sessionFactory.getCurrentSession();
}
}
実装:
public class UserDao extends BaseDao implements Dao {
@Transactional(readOnly=true)
@Override
public Object load(long id) {
Object user = currentSession().get(User.class, id);
return user;
}
}
以下は、上記の例外をスローします。
UserDao dao = (UserDao) context.getBean("userDao");
ただし、これは例外をスローしません。
Dao dao = (Dao) context.getBean("userDao");
この例外が発生する理由について誰かが支援またはガイダンスを提供できる場合は、非常に感謝しています.