2016-07-15 6 views
0

Я пытаюсь запустить Flexible Search Query из слоя DAO. Мой запрос - это что-то вроде:java.lang.IllegalArgumentException: invalid pks [10] - unknown typecode 0

SELECT {loyaltypoints},{redeemedloyaltypoints} 
FROM {LoyaltyUser} 
WHERE {uid} =?uid 

0 Я вижу сообщение трассировки стека, как

SEVERE: Servlet.service() for servlet [DispatcherServlet] in context with path [/store] 
threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: 
    invalid pks [10] - unknown typecode 0] with root cause 
    java.lang.IllegalArgumentException: invalid pks [10] - unknown typecode 0 
    at de.hybris.platform.core.WrapperFactory.getCachedItems(WrapperFactory.java:304) 
    at de.hybris.platform.core.LazyLoadItemList.loadPage(LazyLoadItemList.java:230) 
    at de.hybris.platform.servicelayer.search.impl.LazyLoadModelList.loadPage(LazyLoadModelList.java)" 

Мои items.xml выглядит следующим образом:

<itemtype code="LoyaltyUser" extends="Customer" autocreate="true" generate="true" 
    jaloclass="de.hybris.merchandise.core.jalo.LoyaltyUser"> 
    <deployment table="LoyaltyUsers" typecode="10010"/> 
    <attributes> 
     <attribute generate="true" autocreate="true" qualifier="loyaltypoints" type="java.lang.Integer" > 
      &ltdescription&gtLoyalty points given for each purchase&lt/description&gt 
      <modifiers read="true" write="true" search="true" optional="true" /> 
      <defaultvalue>Integer.valueOf(0)</defaultvalue> 
      <persistence type="property"/> 
     </attribute> 
     <attribute generate="true" autocreate="true" qualifier="redeemedloyaltypoints" type="java.lang.Integer" > 
      <description>Redeemed Loyalty points For a customer</description> 
      <modifiers read="true" write="true" search="true" optional="true" /> 
      <defaultvalue>Integer.valueOf(0)</defaultvalue> 
      <persistence type="property"/> 
     </attribute> 
    </attributes> 
</itemtype> 

Может кто-нибудь помочь мне с этим вопросом?

+1

Вы попробовали отладить это? Не могли бы вы предоставить полную гибкую строку запроса? Каков твой тип возврата запроса? Если вы ожидаете появления экземпляров LoyaltyUser, возможно, вам придется включить {pk}, чтобы вернуть элемент LoyaltyUser обратно, сейчас вы выбираете только два целых числа. – Sebastian

ответ

1

Вместо получения двух атрибутов {loyaltypoints}, {redeemedloyaltypoints} в запросе, вы должны получить PK своей модели LoyaltyUser.

SELECT {pk} FROM {LoyaltyUser} WHERE {uid} =?uid

Запрос даст LoyaltyUserModel, то вы можете получить его атрибут, метод получения.

Integer loyalyPoint = loyaltyUserModel.getLoyaltypoints() 
Integer redeemedLoyaltyPoint = loyaltyUserModel.getRedeemedloyaltypoints() 
+0

Он отлично работает после добавления pk в поиск flexi, но зачем было бы здесь добавлять pk. – user2579718