2014-09-10 1 views
0

У меня есть модель:Почему JPQL возвращает только первое и последнее поле в результате запроса с использованием AS?

public class SomeModel extends Model { 

     private String name; 

     private String description; 

     private String comment; 

     ... a lot of other fields 

     private String note; 

} 

Я хочу, чтобы получить список моделей из базы данных в виде списка карт с только необходимыми полями. Я делаю это следующим образом:

EntityManager em = GuiceConfigSingleton.inject(EntityManager.class); 

Query query = em.createQuery("SELECT 
o.name AS ModelName, 
o.description AS ModelDescription, 
o.comment AS ModelComment, 
o.note AS ModelNote 
FROM SomeModel o"); 

query.setHint(QueryHints.RESULT_TYPE, ResultType.Map); 

Результаты поиска по этому запросу - это список карт. И каждая карта содержит только первое (ModelName) и последнее (ModelNote) поле (другие поля в базе данных не пусты). Когда я делаю это без «как», используя только:

Query query = em.createQuery("SELECT 
o.name, 
o.description, 
o.comment, 
o.note 
FROM SomeModel o"); 

У меня есть все поля, но без правильных ключей. Что не так?

с Скриншоты упрощенный пример:

С "AS": http://imgur.com/bKZnqSx без "AS": http://imgur.com/PieCRzg

UPDATE: Это была ошибка в EclipseLink 2.5.0. С 2.5.2 все в порядке!

+0

Пожалуйста, подумайте о том, чтобы переформулировать свой вопрос, это не имеет большого смысла, поскольку он стоит сейчас. Что вы ожидаете? – Rick

+0

Спасибо, Рик! Я только что редактировал свой вопрос. Надеюсь, теперь это выглядит лучше. –

+0

«Без правильных ключей»? Что вы имеете в виду? – dcsohl

ответ

0

Это ошибка в версии 2.0 EclipseLink. С 2.5.1 все в порядке!

Извлеченный урок: всегда проверяйте последний выпуск.

0

есть другой способ извлечения этих полей

Query query = entityManager.createNativeQuery("your existing query"); 

    final List<Object[]> rsList = (List<Object[]>) query.getResultList(); 
    for (Object[] objects : rsList) { 

     String modelName = objects[0] == null ? "" 
       : objects[0].toString(); 
     String modelDesc = objects[1] == null ? "" 
       : objects[1].toString(); 
     String comment = objects[2] == null ? "" 
       : objects[2].toString(); 

     String note = objects[3] == null ? "" 
       : objects[3].toString(); 
    } 

Я надеюсь, что это помогает.

+0

Спасибо! Я уже получаю свои результаты. Мне просто интересно, почему EclipseLink имеет такое странное поведение, когда я использую оператор «как» в запросе. –

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

  • Нет связанных вопросов^_^