Я использую JPQL и NamedQuery для запроса базы данных в комбинированном вопросе.
@NamedQuery(name = "Entry.findAllForName", query = "Select p From Entry p Where p.entryId In(Select dp.entry From EntryPart dp Where dp.part IN(Select d From Part d Where d.senderId = :name))"),
Когда я запускаю этот запрос, используя:
Query query = em.createNamedQuery("Entry.findAllForName").setParameter("name", name);
List<Entry> list = query.getResultList();
logger.info("Complete query size: {}", list.size());
Это возвращает набор результатов, но это 0.
Когда я изменяю именованный запрос на:
@NamedQuery(name = "Entry.findAllForName", query = "Select p From Entry p Where p.entryId In(Select dp.entry From EntryPart dp Where dp.part IN(Select d From Part d Where d.senderId = 'SenderName'))"),
Это работает, и я получаю ожидаемый результат базы данных.
Я не так хорошо знаком с JPQL и @NamedQueries, но я не вижу разницы между наличием String vaule и значением параметра, поскольку, когда я делаю diff, они одинаковы.
logger.info("SenderName == {} ? {}", name, name.equals("SenderName"));
Это возвращает "SenderName == SenderName? true"...
Лучший, Хенрик