У меня есть иерархия классов, подобная этой:
@Entity
@Table (name="call_distribution_policies")
@Inheritance (strategy=InheritanceType.JOINED)
public class CallDistributionPolicy implements Serializable, Cloneable{
----------------
}
@Entity
@Table(name="skill_based_call_distribution_policies")
public class SkillBasedCallDistributionPolicy extends CallDistributionPolicy {
--------------
}
public class CallDistributionPolicyDAOJPAImpl extends
AbstractJPADAOImpl<CallDistributionPolicy> implements
CallDistributionPolicyDAO {
}
public CallDistributionPolicy get(long id) {
try {
Query query = entityManager
.createQuery("from CallDistributionPolicy where id = :id");
query.setParameter("id", id);
List<CallDistributionPolicy> resultList = query.getResultList();
if (!CollectionUtils.isEmpty(resultList)) {
return resultList.get(0);
}
return null;
} catch (EntityNotFoundException e) {
return null;
}
}
}
Когда я делаю это: log.debug ("нагружено:" + callDistributionPolicyDao.get (10) .toString ())
Он печатает toString () из SkillsBasedCallDistributionPolicy
Но когда я пытаюсь привести его так:
SkillsBasedCallDistributionPolicy scdp = (SkillsBasedCallDistributionPolicy) callDistributionPolicyDao.get(10)
Я получаю исключение приведения класса.
com.vantage.callcenter.core.entity.acd.CallDistributionPolicy$$EnhancerByCGLIB$$334f3d1b cannot be cast to com.vantage.callcenter.core.entity.acd.SkillBasedCallDistributionPolicy
Проверка instanceof тоже не удалась!
Когда я проверяю объект в затмении, я вижу прокси-сервер CGLIB, но, насколько я понимаю, прокси-сервер CGLIB должен расширять класс SkillsBasedCallDistributionPolicy?В свойстве CGLIB $ CALLBACK_0 я вижу, что классом сущности является «CallDistributionPolicy», но целью является «SkillsBasedCallDistributionPolicy».
Каким должен быть правильный процесс загрузки подкласса?Я вижу, что hibernate генерирует весь правильный SQL и загружает правильный подкласс, но как я могу проверить instanceof и привести его к подклассу?
Я использую hibernate 3.2.1, Spring 2.5.5, cglib2.1_3.Есть предложения?