我不知道这个MySQL查询在JPQL中会是什么样子。详情:
select title
from post
order by (
select count(postId)
from comment
where comment.postId=post.id
) desc;编辑:投递表外观:
mysql> desc post;
+---------------+----------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+----------------+------+-----+---------+----------------+
| post_id | int(11) | NO | PRI | NULL | auto_increment |
| post_content | varchar(50000) | NO | | NULL | |
| post_date | datetime | NO | | NULL | |
| post_summary | varchar(1000) | YES | | NULL | |
| post_title | varchar(300) | NO | | NULL | |
| post_visitors | int(11) | NO | | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| category_id | int(11) | NO | MUL | NULL | |
+---------------+----------------+------+-----+---------+----------------+注释表查看:
mysql> desc comment;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| comment_id | int(11) | NO | PRI | NULL | auto_increment |
| comment_content | varchar(600) | NO | | NULL | |
| comment_date | datetime | NO | | NULL | |
| comment_title | varchar(300) | NO | | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| post_id | int(11) | NO | MUL | NULL | |
+-----------------+--------------+------+-----+---------+----------------+这是mysql中的命令终端。
mysql> select post_title from post order by (select count(post_id) from comment where comment.post_id=post.post_id) desc;我试过了,但没用:
SELECT p FROM Post p ORDER BY
(SELECT c COUNT(c.getPost().getId())
from Comment c
where c.getPost().getId()=p.getId())
desc发布于 2014-01-02 19:27:16
我使用了本地SQL来获得我需要的结果。所以,这并不是我的问题的真正答案,但我会张贴我做了什么,什么工作(与普通SQL)。因为,它不是用JPQL实现的,所以entity class中没有named query,但是已经使用了native query (在DAO object方法中)。
因此,这是方法内容:
public List<Post> getMostCommentedPosts(){
Query q = em.createNativeQuery("select * from post order by "
+ "(select count(post_id) from comment where comment.post_id=post.post_id) desc", Post.class);
List<Post> resultList = (List<Post>) q.getResultList();
if (resultList.isEmpty())
return null;
else
return resultList;
}发布于 2013-12-31 16:27:30
非工作方法的主要问题是从JPQL查询调用Java类的方法--这是不可能的。
假设实体的重要属性大致如下:
@Entity
public class Post {
@Id int id;
@OneToMany (mappedBy = "post") List<Comment> comments;
//...
}
@Entity
public class Comment {
@Id int id;
@ManyToOne Post post;
//...
}那么,使用Hibernate+MySQL组合体应该就足够了:
SELECT p
FROM Post p
ORDER BY SIZE(p.comments) DESCJPA2.0规范需要更复杂的查询,因为可以按ORDER子句使用的查询非常有限:
下面的查询也应该与其他实现一起工作。当然,附加变量是结果的一部分,这是有点乏味的:
SELECT p, SIZE(p.comments) as ord
FROM Post p
ORDER BY ord DESC发布于 2013-12-30 21:33:02
我不使用JPQL,但这可能会奏效(您也可以在MySQL中使用它):
SELECT post_title, COUNT(c.post_id) AS c
FROM Post p
LEFT JOIN Comment c
ON p.post_id = c.post_id
ORDER BY chttps://stackoverflow.com/questions/20847624
复制相似问题