2015-11-24 5 views
0

Добрый вечер! Я пытаюсь установить значения от моего запроса к обертке класса TestWrapperHibernate NamedQuery, значение

TestWrapper класс:

package com.bionic.wrappers; 

public class TestWrapper { 

    private String name; 
    private int duration; 

    public TestWrapper(){ 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getDuration() { 
     return duration; 
    } 

    public void setDuration(int duration) { 
     this.duration = duration; 
    } 
}

Вот мой запрос:

@NamedQuery(name = "getAvailableTestsNames", 
    query = "SELECT test.testName, test.duration FROM Result result JOIN result.test test JOIN result.user user where user.id = :userId" 

и DAO класса:

public List<TestWrapper> getAvailableTestsNames(long id){ 
    Query query = em.createNamedQuery("getAvailableTestsNames"); 
    query.setParameter("userId", id); 
    return (List<TestWrapper>)query.getResultList(); 
} 

я получаю Exeption и я вижу, что значения не будут устанавливать здесь уместно:

public static Set<TestDTO> convertAvailableTestsToDTO(List<TestWrapper> tests){ 
    Set<TestDTO> testDTOs = new HashSet<>(); 
    for (TestWrapper test : tests){ 
     TestDTO testDTO = new TestDTO(test.getName(), test.getDuration()); 
     testDTOs.add(testDTO); 
    } 
    return testDTOs; 
} 

я получаю expeption:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.bionic.wrappers.TestWrapper 

Спасибо!

+0

'query.getResultList();' это это в интерфейсе запросов? –

+0

yeap, это есть. – quento

+0

Можете ли вы вначале выяснить, что не так, и что вы ищете? – Whitecat

ответ

1

У меня недостаточно контекста, но в getAvailableTestsNames meth. похоже, что вы выполняете запрос, который возвращает скалярные результаты, возвращая «test.testName, test.duration», где вы, вероятно, просто хотите вернуть список TestWrapper, чтобы запрос был просто «от XXX», вы можете опустить выбранный field1, field2 ... hibernate делает это для вас.

См. Раздел 11.4.1.3. Скалярные результаты https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch11.html#objectstate-querying против 11.4.1. Выполнение запросам

Надеются, что это помогает

Аа.

+0

Я просто не хочу перегружать db данными, которые мне не нужны. Поэтому я пытаюсь получить только поля, которые мне нужны – quento

+0

Ну, у вашей сущности есть 2 сохраненных свойства, поэтому я не вижу, как это перегрузится. Попробуйте. В противном случае см. 11.4.1.3, что для следующего при запросе только для 2 столбцов. Cheers – awahaani

+0

yeap. эта ссылка была полезна, спасибо – quento

Смежные вопросы