【发布时间】:2013-09-17 18:38:01
【问题描述】:
编辑:通过删除与问题无关的细节进行清理。
问题。 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。
【问题讨论】:
-
我已经与这个问题斗争了两天了。是的,这可能是由于我犯了一个愚蠢的错误,但这绝不是我简单地决定把它放到社区中。 如果您想否决这个问题并减少我获得答案的机会,请花点时间提供理由。 这会给我一个机会来改进这个问题。谢谢。
标签: java jpa oracle10g jpql varchar