Я вижу странное сообщение об ошибке и ищу идеи о том, в чем может быть проблема. Я новичок в использовании JPA.
У меня есть приложение, в котором я использую Spring Entity Manager Factory (LocalContainerEntityManagerFactoryBean), EclipseLink в качестве моего поставщика ORM, подключенный к базе данных MySQL и созданный с помощью Maven. Я не уверен, если что-то из этого имеет значение .....
Когда я развертываю это приложение на Glassfish, оно работает как положено.
Проблема в том, что я создал набор автономных модульных тестов для работы вне Glassfish, которые работают неправильно. Я получаю следующую ошибку ( Я немного отредактировал имена классов )
com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
Объект не может быть приведен к классу того же типа? Как это может быть?
Вот фрагмент кода, который содержит ошибку
Query q = entityManager.createNamedQuery("MyEntity.findAll");
List entityObjects = q.getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
Ранее у меня был этот код, который выдал ту же ошибку:
CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery();
cq.select(cq.from(com.xyz.abc.services.persistence.entity.MyEntity.class));
List entityObjects = entityManager.createQuery(cq).getResultList();
for (Object entityObject: entityObjects) {
com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject;
Этот код вопроса является тем же, что я развернул на сервере.
Вот самое внутреннее исключение, если оно помогает
Caused by: java.lang.ClassCastException: com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity
at com.xyz.abc.services.persistence.entity.factory.MyEntityFactory.createBeans(MyEntityFactory.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:115)
... 37 more
Я предполагаю, что в Glassfish я использую банку, отличную от той, которую я использую в тесте. Я посмотрел на все банки, которые я перечислил как «предоставленные», и уверен, что они все те же, что и в Glassfish.
Дайте мне знать, если вы видели эту странную проблему раньше, или у вас есть идеи по ее исправлению.