如何使用 JPA(JPQL 或 Criteria API)在运行时 select 列?

How select column at rune time using JPA (JPQL or Criteria API)?

我已经在 SO 和网络上进行了搜索,但找不到此问题的答案。如何使用 JPQL 或 JPA 的条件 API 编写以下 MySQL 查询?

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

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

我可以想象它看起来像:

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

但这不能编译。 谢谢

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

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"