Редактировать: Очистка путем удаления деталей, не имеющих отношения к проблеме.JPA запрос с типом CHAR. Был ли: запрос JPA с WHERE и EmbeddedId
Проблема. Запрос JPA не возвращает результатов.
String qstr = "select o from MyStats o where o.queue_name = :queue";
String queue = "3";
em.createQuery(qstr).setParameter("queue", queue);
Я думал, что проблема была либо в неправильном синтаксисе запроса JPA или в неправильном аннотирования EmbeddedID. Поэтому я разместил определения классов, но ничего не сказал о таблице базы данных, кроме того, что это был Oracle.
Мой тестовый код: прочитайте из БД, сделайте первое значение и повторите использование этого значения в следующем запросе выбора, означающем, что запись существует. Должно быть, это было просто прочитано, верно?
Тест
String queue = "";
String qstr1 = "select o from MyStats o";
String qstr2 = "select o from MyStats o where o.queue_name = :queue";
logger.debug("SQL query: " + qstr1);
List<MyStats> list = em.createQuery(qstr1).getResultList();
logger.debug("111 Returning results: " + list.size());
for (MyStats s : list) {
queue = s.getQueue_name();
logger.debug("Picking queue name: " + queue);
break;
}
logger.debug("SQL query: " + qstr2);
list = em.createQuery(qstr2).setParameter("queue", queue).getResultList();
logger.debug("222 Returning results: " + list.size());
Выход:
SQL query: select o from MyStats o
111 Returning results: 166
Picking queue name: 3
SQL query: select o from MyStats o where o.rec_id.queue_name = :queue
222 Returning results: 0
Определение класса
@Entity
public class MyStats {
private String queue_name;
private long stats_id;
... //getters and setters
}
Запрос без ГДЕ предложение работает правильно, так как запрос с членом класса MyStats.
em.createQuery("select o from MyStats o where o.stats_id = :sid").setParameter("sid", 179046583493L);
Я использую Oracle 10 базы данных, Java EE 5 SDK, Glassfish 2.1.
Я уже два дня борюсь с этой проблемой. Да, это может быть из-за глупой ошибки с моей стороны, но это не так, как будто я просто решил бросить это на сообщество. ** Если вы хотите уменьшить этот вопрос и уменьшить мои шансы получить ответ, пожалуйста, найдите момент, чтобы указать причину. ** Это даст мне шанс ** улучшить вопрос. Спасибо. – dmitri