Наше приложение начало вызывать ошибки на промежуточном сервере после того, как мы развернули новый EAR:
org. apache .openjpa.persistence.ArgumentException: при синтаксическом анализе фильтра запросов "SELECT произошла ошибка" e ИЗ FooData e ГДЕ e.companyId =: companyId И e.fooId =: fooId ". Сообщение об ошибке: имя «FooData» не является распознанным объектом или идентификатором. Возможно, вы имели в виду RequestStatus, который близко соответствует. Известные имена сущностей: [RequestStatus, GlobalBalance, LocalBalance]
Мы удалили уязвимую версию и развернули предыдущую, но ошибки остались (?).
Это код, который выдает ошибочный запрос:
package com.example.my_project.model.facades;
import com.example.my_project.model.FooData;
import com.example.my_project.model.facades.interfaces.IFooDataDAO;
import javax.ejb.Stateless;
import javax.persistence.NoResultException;
import javax.persistence.Query;
@Stateless(name = "IFooDataDAO", mappedName = "IFooDataDAO")
public class FooDataDAO extends GenericDAO<FooData> implements IFooDataDAO {
public FooDataDAO() {
super(FooData.class);
}
@Override
public FooData getFooByNumberId(String companyId, String fooId) {
FooData foo = null;
try {
Query query = em.createQuery("SELECT e FROM FooData e WHERE e.companyId =: companyId AND e.fooId =: fooId")
.setParameter("companyId", companyId)
.setParameter("fooId", fooId);
foo = (FooData) query.getSingleResult();
} catch (NoResultException e) {
return null;
}
return foo;
}
}
Пробная ошибка привела к этому исправлению:
Query query = em.createQuery("SELECT e FROM com.example.my_project.model.FooData e WHERE e.companyId = :companyId AND e.fooId = :fooId")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Почему это работает? Я уверен, что это просто подчеркивает предыдущую ошибку кодирования или конфигурации, но я даже не знаю, что искать. Буду признателен за любые рекомендации.