【问题标题】:How select column at rune time using JPA (JPQL or Criteria API)?如何使用 JPA(JPQL 或 Criteria API)在符文时选择列?
【发布时间】:2015-03-18 12:19:43
【问题描述】:

我在 SO 和网络上搜索过这里,但找不到这个问题的答案。如何使用 JPQL 或 JPA 的 Criteria API 编写以下 MySQL 查询?

public String getLanguage(String language) { 
    String query = "SELECT i18n." + language + " AS translated FROM i18n";
}

我意识到这个特定的查询没有意义,但对我来说问题是动态选择列。即选择 i18n.language 在运行时选择“语言”。

我可以想象它看起来像:

public List getLanguage(String language) {
    return entityManager.createQuery(
        "SELECT l.:language FROM I18n i"
    ).getResultList();
}

但这不会编译。 谢谢

【问题讨论】:

    标签: java mysql jpa jpql criteria-api


    【解决方案1】:

    你不能用参数来做,因为参数不能用来替换列名,但你可以用类似于普通 SQL 的方式来做

    public List getLanguage(String language) {
        return entityManager.createQuery("SELECT i." + language + " as translated FROM I18n i").getResultList();
    }
    

    编辑

    一种使用参数的方法,但这不是真正的动态解决方案,您必须对所有选项进行硬编码

    SELECT CASE WHEN :language = 'EN' THEN i.en WHEN :language = 'MK' THEN i.mk END as translated FROM I18n i"
    

    【讨论】:

    • 是的,这行得通。感谢您的快速回复。但这就像你所说的 SQL。没有“JPA 方式”可以做到吗?谢谢
    • 不客气,我已经用类似 JPA 的示例更新了答案 :)
    猜你喜欢
    • 2012-09-19
    • 2019-11-10
    • 2014-06-13
    • 2011-03-29
    • 2015-02-15
    • 2011-04-20
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多