Spring data JPA - объект карты, возвращенный из собственного запроса в POJO - PullRequest
0 голосов
/ 22 октября 2018

У меня есть сценарий, в котором я хочу сопоставить данные, извлеченные из собственного запроса в репозитории JPA, с пользовательским объектом.

Мой код репозитория выглядит следующим образом:

@Query(nativeQuery = true,name = "TopCouponOffer")
List<TopCouponOffer> findTodayTopOffer(@Param("date") String date, @Param("time") String time);

Мой код пользовательского классавыглядит следующим образом:

@NamedNativeQuery(
    name = "TopCouponOffer",
    query =
           "SELECT c.id,c.code\n" +
                   " FROM COUPON c \n" +
                   "JOIN CLICK cl\n" +
                   "ON cl.coupon_id = c.id\n" +
                   "JOIN COUPONS_STATUS cs\n" +
                   "ON cs.id= c.coupons_status_id\n" +
                   "JOIN COUPONS_OFFER_TYPE ct\n" +
                   " ON ct.id= c.coupons_offer_types_id\n" +
                   "WHERE\n" +
                   " c.ongoing_offer = 1 AND\n" +
                   " c.coupons_status_id != 4 AND\n" +
                   "IF(:date < c.end_date,\n" +
                   "             IF(:date < c.start_date,\n" +
                   "                 0,\n" +
                   "                 IF(:date = c.start_date,\n" +
                   "                     IF(:time < c.start_time,\n" +
                   "                         0,\n" +
                   "                         1),\n" +
                   "                     1)),\n" +
                   "             IF(:date = c.end_date || :date = c.start_date, \n" +
                   "                IF(:time > c.end_time || :time < c.start_time,\n" +
                   "                         0,\n" +
                   "                         1), 0)) = 1 ORDER BY cl.count DESC LIMIT 2",
    resultSetMapping = "TopCouponOffer",
    resultClass = TopCouponOffer.class
)
@SqlResultSetMapping(name="TopCouponOffer",
        classes = {
        @ConstructorResult(targetClass = TopCouponOffer.class,columns = {
                @ColumnResult(name = "id"),
                @ColumnResult(name = "code")
        })
        }
)
public class TopCouponOffer {
    Integer id;
    String code;
    public TopCouponOffer(Integer id, String code){
       this.id=id;
       this.code=code;
   }
}

Но я получаю следующую ошибку при запуске приложения

Причина: org.springframework.data.mapping.PropertyReferenceException: не найдено свойство findTodayTopOfferдля типа Coupon!

Должен ли я переместить запрос имени и sqlresultmapping в свой класс сущностей?Дело в том, что я не хочу загрязнять свой класс сущностей. Могу ли я достичь этого, добавив больше кода в свой класс сущностей?

1 Ответ

0 голосов
/ 22 октября 2018

Я считаю, что ваше имя функции в хранилище должно быть переименовано в findByDateAndTime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...