繁体   English   中英

如何使用JPA(JPQL或Criteria API)在符文时选择列?

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

我在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();
}

但这无法编译。 谢谢

您无法使用参数来完成此操作,因为参数不能用于替换列名,但是您可以采用与普通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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM