Как выбрать столбец во время руны с помощью JPA (JPQL или Criteria API)?

Я искал здесь, в SO и в Интернете, но не нашел ответа на эту проблему. Как мне написать следующий запрос MySQL, используя JPQL или JPA Criteria API?

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

но это не компилируется. Спасибо


person Borche    schedule 20.01.2015    source источник


Ответы (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"
person Predrag Maric    schedule 20.01.2015
comment
Да, это работает. Спасибо за быстрый ответ. Но это похоже на SQL, как вы сказали. Нет JPA-способа сделать это? Спасибо - person Borche; 20.01.2015
comment
Не за что, я обновил ответ примером, подобным JPA :) - person Predrag Maric; 20.01.2015