2013-07-29 2 views
1

Я обнаружил, что, используя очень общий запрос, как это:Native выберите ... в() пункт с Spring Data JPA

@Query(nativeQuery=true, value="select * from questions where id in (22,45,65,777,444)") результаты в виде списка объектов, а не список вопросов объекта.

[[Ljava.lang.Object;@49fd8d8f, [Ljava.lang.Object;@2558cd3c, [Ljava.lang.Object;@690a314b]

Как эта ситуация будет исправлена?

Как я могу управлять этим прямо сейчас?

Спасибо!

Edit:

@RooJpaRepository(domainType = Challenge.class) 
public interface ChallengeRepository extends ChallengeRepositoryCustom 
{ 
    @Query(nativeQuery=true, value="select * from questions where id in (22,45,65,777,444)") 
    List<Questions> chooseRandomOldQuestions(); 
} 
+1

Зачем использовать собственный запрос? JPQL 'выберите q из Вопроса q, где q.id в (22,45,65,777,444)' вернет «Список » –

+0

№. Это базовый пример запроса, чтобы продемонстрировать его с помощью spring-data-jpa, но mi query is гораздо сложнее, чем этот, поэтому он должен быть создан в основном режиме. Я показываю это, чтобы сосредоточиться на проблеме. –

+0

Как выглядит интерфейс вашего репозитория? –

ответ

1

я сильно чувствую, что это не имеет ничего общего с оговоркой in но типов, которые вы используете.

Ваш репозиторий печатается на уровне домена Challenge. Question (я думаю, вы имеете в виду, что вместо Questions), вероятно, не является подтипом Challenge? Если это так, мы не передаем тип домена EntityManager для размещения сценариев, в которых люди выполняют прогнозы до Long и т. Д., И выполнение запроса завершится неудачно, если мы передадим неконтролируемый тип выполнению запроса.

Обходной путь заключается в создании специализированного хранилища, управляющего Question(s) экземплярами (все еще не уверен, что это опечатка или отдельный класс) должен сделать трюк.

+0

Задача имеет набор . Это то, что вы имеете в виду подтипом? Если я попытаюсь получить только один объект Question в запросе, все будет в порядке. –

+0

Кроме того, я могу получить любой объект (будучи подтипом или нет) в любом из моих репозиториев, эта проблема возникает только при использовании предложения «in». –

+0

Это не может быть так. Подтип I означает подтип в способе наследования. Если вы используете собственный запрос * и *, не имеете подтипа возвращаемого корневого типа репозитория, вы увидите родные типы (читайте: «Карты,' Long' и т. Д.). Это похоже на то, что «Вопросы», похоже, не являются подтипом «Challenge» (как уже указано в моем ответе). –