如何在HQL中编写查询查询(hibernate)

时间:2013-10-29 18:02:18

标签: sql hibernate hql

我正在尝试通过查询查询来补充一些数据。它是一个相当复杂的sql查询复杂的关系,我想将其转换为HQL。

我将使用数据关系的简化版本来简化讨论。

那么我怎么能把它翻译成HQL呢?是否可以在HQL中查询查询?

实施例

假设我们有一位电影评论家在网上评论电影,我们想要归还他所评论的电影数量,他喜欢的电影数量,以及电影。他讨厌的电影数量。

表:

  • 评论家
  • 电影
  • 评论(与LoveFlag的评论家和电影之间的链接表,如果LoveFlag是假的,他讨厌电影)

SQL查询:

(这是一个弥补的场景,我正在研究的解决方案是设备管理。我在堆栈溢出上写了这个查询,所以很可能是它的缺陷。)

  

SELECT criticSummary.id       ,COUNT(criticSummary.reviewId)为totalReviews       ,SUM(criticSummary.isLoved)为totalLoved       ,SUM(criticSummary.isHated)为totalHated

     

FROM(

SELECT DISTINCT critic.id AS id, 
    review.id AS reviewId, 
    review.isLoved AS isLoved, 
    CASE WHEN review.isLoved = 1 THEN 0 ELSE 1 END AS isHated

FROM [critic] critic

INNER JOIN [review] review
ON (
    review.criticId = critic.id
    AND review.active = 1
)

WHERE critic.active = 1 
     

)AS评论家

     

GROUP BY criticSummary.id

1 个答案:

答案 0 :(得分:0)

你真的需要使用HQL吗?您可以选择简化操作:

批评实体中的1个休眠公式字段

@Formula("select count(*) from reviews where id = id and loved = 1")
public int totalMoviesLoved;

@Formula("select count(*) from reviews where id = id and loved = 0")
public int totalMoviesHated;

public int getTotalMoviesReviewed(){
    return get totalMoviesHated + totalMoviesLoved;
}

2创建数据库视图

创建一个数据库视图,比如critic_summary_data 创建映射到此视图的实体(与表一样工作)

将此映射到Critic Entity

@OneToOne
private CriticSummaryData summaryData;