簡體   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