2015-11-12 36 views
0

我有這個疑問:從List到int。無法查詢結果轉換

select count(*) from {Order as or join CustomerOrderStatus as os on 
{or:CustomerOrderStatus}={os:pk} join OrderEntry as oe on 
{or.pk}={oe.order} join PurchaseAmount as pa on 
{or.pointOfSale}={pa.purchaseAmountOwner} join PurchaseAmountTimeSlice 
as ts on {pa.pk}={ts.purchaseamount}} where {or:company} in 
(8796093710341) and {or:pointOfSale} in (8796097413125) 

我有這樣的代碼在Java中檢索結果:

FlexibleSearchQuery query = new FlexibleSearchQuery(queryBuilder.toString()); 
List<Integer> result = new ArrayList<Integer>(); 
result = getFlexibleSearchService().<Integer> search(query).getResult(); 

我想從結果取數的int值名單。 如果我寫result.get(0)我得到一個錯誤IllegalArgumentException

java.lang.IllegalArgumentException: invalid pks [4] - 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:60) 
    at de.hybris.platform.core.LazyLoadItemList.switchPage(LazyLoadItemList.java:219) 
    at de.hybris.platform.core.LazyLoadItemList.switchBufferedPageNoLock(LazyLoadItemList.java:475) 
    at de.hybris.platform.core.LazyLoadItemList.switchBufferedPageSynchronized(LazyLoadItemList.java:467) 
    at de.hybris.platform.core.LazyLoadItemList.switchBufferedPage(LazyLoadItemList.java:462) 
    at de.hybris.platform.core.LazyLoadItemList.getOrSwitchBufferedPage(LazyLoadItemList.java:453) 
    at de.hybris.platform.core.LazyLoadItemList.getOrSwitchBufferedPage(LazyLoadItemList.java:433) 
    at de.hybris.platform.core.LazyLoadItemList.getBuffered(LazyLoadItemList.java:111) 
    at de.hybris.platform.core.LazyLoadItemList.get(LazyLoadItemList.java:97) 
    at java.util.AbstractList$Itr.next(AbstractList.java:358) 
    at de.hybris.platform.core.internal.BaseLazyLoadItemList$1.next(BaseLazyLoadItemList.java:180) 
    at java.util.AbstractCollection.toArray(AbstractCollection.java:195) 
    at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1059) 

我怎樣才能得到int值?

+1

當你問關於異常,總是發佈異常的堆棧跟蹤。 –

回答

0

我以這種方式解決:

private FlexibleSearchService flexibleSearchService; 

    @Override 
    public void onValidate(PurchaseAmountTimeSliceModel paramMODEL, InterceptorContext paramInterceptorContext) 
     throws InterceptorException { 

     //..... 
     final StringBuilder queryBuilder = new StringBuilder(); 
     queryBuilder.append("select {ts.pk}"); 
     queryBuilder.append(
       " from {Order as or join CustomerOrderStatus as os on {or:CustomerOrderStatus}={os:pk} join OrderEntry as oe on {or.pk}={oe.order} "); 
     queryBuilder.append(
       "join PurchaseAmount as pa on {or.pointOfSale}={pa.purchaseAmountOwner} join PurchaseAmountTimeSlice as ts on {pa.pk}={ts.purchaseamount}} where "); 

     if (pointOfSale != null && company != null) { 
      queryBuilder.append("{or:company} in (" + company.getPk() + ") and {or:pointOfSale} in (" 
        + pointOfSale.getPk() + ")"); 
     } 
     FlexibleSearchQuery query = new FlexibleSearchQuery(queryBuilder.toString()); 
     SearchResult<PurchaseAmountTimeSliceModel> result = flexibleSearchService.search(query); 

     if (result != null) { 
      if (result.getCount() >= 10) { 
       LOG.error("There's already 10 purchase amount time slices configured. You reached the limit."); 
       throw new InterceptorException(
         "There's already 10 purchase amount time slices configured. You reached the limit."); 
      } 
     } 
    //..... 

的解決方案是相似的;)

+0

你也很清楚地證明你完全缺乏知識和經驗。這就是我所說的「恐怖節目代碼」。 –

+1

並且請使用更多「+ company.getPk()+」,這樣我就可以在你做出更糟糕的例子時攻擊你的網站。 –

+0

給我你的解決方案。寫!沒有人知道... – sharkbait

1

更換count(*)count({or:Pk})並設置結果類的靈活的搜索查詢Integer這樣query.setResultClassList(Collections.singletonList(Integer.class));