【问题标题】:Need help in creating CriteriaQuery在创建 CriteriaQuery 时需要帮助
【发布时间】:2015-12-16 14:32:40
【问题描述】:

首先,我想知道是否可以这样做?

以下是我的查询,我正在尝试使用标准进行构建。

SELECT CONCAT('record-', rl.record_id) AS tempId, 
        'sloka' AS type, 
         rl.record_id AS recordId,
         rl.title AS title, 
         rl.locale as locale,
         rl.intro AS intro, 
         rl.title AS localetitle, 
         NULL AS audioUrl,
         lp.name AS byName,
         lp.person_id AS byId,
         lp.name AS onName,
         lp.person_id AS onId

    FROM record_locale rl 
        LEFT JOIN record r ON rl.record_id = r.record_id 
        LEFT JOIN locale_person lp ON r.written_on = lp.person_id 
    WHERE rl.title LIKE :title 
        AND rl.locale = :locale 
        AND lp.locale = :locale 

UNION 

SELECT CONCAT('lyric-', s.song_id) AS tempId, 
        'bhajan' AS type,
        s.song_id AS recordId,
        s.title, 
        l.locale as locale,
        NULL AS intro,
        l.title AS localetitle,
        s.audio_url AS audioUrl,
        lpb.name AS byName,
        lpb.person_id AS byId,
        lpo.name AS onName,
        lpo.person_id AS onId 

    FROM song s 
        LEFT JOIN locale_person lpb 
    ON (s.written_by = lpb.person_id AND lpb.locale = :locale) 
        LEFT JOIN locale_person lpo
    ON (s.written_on = lpo.person_id AND lpo.locale = lpb.locale)
        INNER JOIN lyric l 
    ON (l.locale = lpb.locale AND l.song_id = s.song_id) 

    WHERE s.title LIKE :title AND s.approved_by IS NOT NULL 

    ORDER BY localeTitle ASC

// END

根据少数情况,我可能需要两个查询的联合,或者只是没有联合的单个查询。

【问题讨论】:

    标签: jpa join left-join criteria


    【解决方案1】:

    将 SQL 转换为 JPQL 通常是很好的第一步,因为我们无法完全确定这些表映射到什么,或者您期望返回什么。如果可以在 JPQL 中执行,则应该可以使用条件查询。除了在这种情况下:JPA/JPQL 没有联合运算符,因此它不能在直接的 JPA 中工作,但一些提供程序(如 EclipseLink)有支持。见:

    UNION to JPA Queryhttp://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/j_union.htm

    【讨论】:

    • 嗨,克里斯,感谢您的帮助。我也在使用休眠。我正在尝试的是,我有两个表 song 和 record_locale,基于几个参数,我希望添加 where 子句。同样基于几个条件,我想只查询歌曲表/record_locale 表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2011-08-02
    • 2013-12-08
    • 1970-01-01
    • 2012-12-02
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多