2016-07-15 302 views
0

我試圖從DAO層激發靈活的搜索查詢。我的查詢是這樣的:java.lang.IllegalArgumentException:invalid pks [10] - unknown typecode 0

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

扔我未知類型的代碼,但我的類型代碼是正確的。我看到這樣

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}在查詢中,你應該得到你的LoyaltyUser模型的PK。

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

查詢會給LoyaltyUserModel那麼你可以通過getter方法的屬性。

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

在flexi搜索中添加pk後它工作正常,但是在這裏添加pk的原因是什麼。 – user2579718