我正在尝试通过查询查询来补充一些数据。它是一个相当复杂的sql查询复杂的关系,我想将其转换为HQL。
我将使用数据关系的简化版本来简化讨论。
那么我怎么能把它翻译成HQL呢?是否可以在HQL中查询查询?
假设我们有一位电影评论家在网上评论电影,我们想要归还他所评论的电影数量,他喜欢的电影数量,以及电影。他讨厌的电影数量。
(这是一个弥补的场景,我正在研究的解决方案是设备管理。我在堆栈溢出上写了这个查询,所以很可能是它的缺陷。)
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
答案 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;