【发布时间】:2014-07-23 18:48:31
【问题描述】:
我正在使用 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 值和参数值之间的区别,因为当我进行 diff 时,它们是相同的。
logger.info("SenderName == {} ? {}", name, name.equals("SenderName"));
这会返回“SenderName == SenderName ? true”...
最好, 亨里克
【问题讨论】:
-
这里能调试一下name的值是什么 -->Query query = em.createNamedQuery("Entry.findAllForName").setParameter("name", name);
-
是的,我也看到调试在说,找到参数'name'并将其设置为“SenderName”。
标签: java jpa jpql named-query