Я использую IBM Open JPA в WebSphere 7, и у меня возникает проблема, когда я пытаюсь сослаться на объект @ManyToOne и продолжаю получать следующую ошибку от DB2:
com.ibm.db2.jcc.b.SqlException: [jcc] [t4] [10120] [10898] [3.50.152] Недопустимая операция: набор результатов закрыт. ОШИБКА = -4470, SQLSTATE = ноль
Я дергаюсь за то, почему это не работает, и надеюсь, что кто-то может помочь.
Вот упрощенное представление схем базы данных:
Таблица отчета
record_id - integer - (первичный ключ - сгенерирован DB2)
agency - integer not null (внешний ключ к раскрывающейся таблице)
Раскрывающийся список таблиц
record_id - integer - (первичный ключ - сгенерированный DB2)
Вот сущность JPA для Отчета, которая ссылается на агентство
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="AGENCY")
private Dropdown agency;
Вот код, в котором я выполняю именованный запрос, чтобы получить данные, а затем просто перебираю набор результатов для распечатки идентификатора отчета и зависимости. Всякий раз, когда вызывается report.getAgency (), я получаю ошибку «набор результатов закрыт» из DB2:
@SuppressWarnings("unchecked")
public List<Report> getOpenIncidentsForUser(String aceId) throws Exception
{
List<Report> results = null;
EntityManager em = getEntityManager();
try
{
Query query = em.createNamedQuery("getOpenIncidentsForUser");
query.setParameter(1, aceId);
results = (List<Report>) query.getResultList();
Iterator<Report> it = results.iterator();
while(it.hasNext())
{
Report report = it.next();
System.out.println("Report [" + report.getRecordId() + "] Agency: [" + report.getAgency() + "]");
}
}
catch (Exception e)
{
log.fatal("Fatal error getting incidents for user", e);
throw e;
}
finally
{
em.close();
}
return (List<Report>) results;
}
если я никогда не обращаюсь к методу getAgency, я могу напечатать что-нибудь еще об отчете без проблем. Это только кажется со ссылкой на 2-й таблицы. Есть идеи?