2012-07-12 13 views
2

可能重复:
SQL Query with MySQLSQL查询使用Hibernate的RESTful Web服务

我实现了在Java中使用新泽西州REST Web服务(JAX-RS)。我使用休眠从MySQL数据库中获取数据。 与此查询:

(Select distinct deliverable.id from Task as t where t.project.id= :id And t.user.username = :name order by t.id desc") 
        .setMaxResults(3) 
        .setLong("id", projectId) 
        .setString("name", username) 
        .list(); 

我有一个正确的结果,其为:[275,51,286]。这是每一个ID在数据库中提供的密钥:

id  key 
--------------------- 
    275  2.0 
    51  cm 
    286  19.87 

现在我用这个查询(一切都只是deliverable.key代替deliverable.id相同):

(Select distinct deliverable.key from Task as t where t.project.id= :id And t.user.username = :name order by t.id desc") 
        .setMaxResults(3) 
        .setLong("id", projectId) 
        .setString("name", username) 
        .list(); 

结果:[“2.0”,“19.88”,“19.99”]。第一个是对的,但第二个和第三个是完全不同的关键。

也许它可以通过“别名”或任何其他方式解决。你的建议?

+1

我想你会发现,如果你拿走.setMaxResults,你得到正确的结果,只是以不同的顺序。 – 2012-07-12 18:00:11

+0

是的你是对的,但我需要完全按照这个顺序。然后获取前三名,这就是为什么我使用.setMaxResults。你有什么想法如何修改查询? – Ali 2012-07-12 19:03:24

+0

但是这是什么顺序呢?你不是很明确。对于这两个查询请尝试像'ORDER BY t.id,deliverrable.id',或者您希望它的任何顺序。 – 2012-07-12 19:14:09

回答

0

我找到了答案:

("select d.key from Deliverable as d, Task as t 
       where t.deliverable.id = d.id and 
       t.id = (select max(t1.id) from Task t1 where t1.deliverable.id = d.id) 
       and d.project.id= :id 
       and t.user.username = :name 
       order by t.id desc") 
     .setMaxResults(3) 
     .setLong("id", projectId) 
     .setString("name", username) 
     .list();