编辑:通过删除与问题无关的细节进行清理。
问题。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
}
没有 WHERE 子句的查询可以正常工作,因此可以作为具有 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。