JPA выбрать не может работать - PullRequest
1 голос
/ 13 декабря 2011
select id,name,amount,sort 
from 
(select id,name,amount,sort,gift_id,count(gift_id) 
from 
(select * from t_lpw_gift g join t_lpw_dianxin_gift d on g.id=d.gift_id) 
group by gift_id,id,name,amount,sort order by count(gift_id) desc) 
where rownum <=5;

как использовать jpa createNativeQuery для выбора, база данных - oracle

таблица:

SQL> desc t_lpw_gift;
Name   Type         Nullable Default Comments 
------ ------------ -------- ------- -------- 
ID     INTEGER                                
NAME   VARCHAR2(32)                           
PRICE  NUMBER                                 
AMOUNT INTEGER                                
SORT   VARCHAR2(32) Y                         

SQL> desc t_lpw_dianxin_gift;
Name        Type    Nullable Default Comments 
----------- ------- -------- ------- -------- 
GIFT_ID     INTEGER                           
DIANXIN_ID  INTEGER                           
GIFT_NUMBER INTEGER Y  

return return Entity - t_lpw_gift

public List<Gift> getHotGifts(int topHotGiftsNum) {
    String sql = "select id,name,amount,sort from (select id,name,amount,sort,gift_id,count(gift_id) from (select * from t_lpw_gift g join t_lpw_dianxin_gift d on g.id=d.gift_id) group by gift_id,id,name,amount,sort order by count(gift_id) desc) where rownum <= :topHotGiftsNum";
return (List<Gift>)em.createNativeQuery(sql,Gift.class).setParameter("topHotGiftsNum", topHotGiftsNum).getResultList();
}

18: 55: 11 473 ПРЕДУПРЕЖДЕНИЕ [org.hibernate.util.JDBCExceptionReporter] Ошибка SQL: 17006, SQLState: 99999 18: 55: 12 992 ОШИБКА [org.hibernate.util.JDBCExceptionReporter] 列 名 无效 ()

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Для собственных параметров SQL в JPA необходимо использовать позиционный параметр вместо именованного параметра.Именованные параметры не поддерживаются в соответствии со спецификацией.

Итак, измените :topHotGiftsNum на ?1 и setParameter(1, topHotGiftsNum).

См. этот ответ

Редактировать: ОК, это не так.Это должно быть так: в предложении select отсутствует какое-либо свойство из сущности или неправильно введен один из столбцов в предложении select.Ваше предложение select должно включать все столбцы из сущности, без различий в именах.Согласно этой теме на форумах Hibernate .

0 голосов
/ 13 декабря 2011

Комментарий @Kent заставляет меня искать ключевые слова: http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/reservewords.htm

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

...