从列表到整数。无法转换查询结果
From List to int. Unable to convert a query result
我有这个查询:
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();
我想从结果列表中取出计数的整数值。
如果我写 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.next(BaseLazyLoadItemList.java:180)
at java.util.AbstractCollection.toArray(AbstractCollection.java:195)
at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1059)
如何获取 int 值?
将 count(*)
替换为 count({or:Pk})
并将灵活搜索查询的结果 class 设置为 Integer
像这样 query.setResultClassList(Collections.singletonList(Integer.class));
我是这样解决的:
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.");
}
}
//.....
解决方法类似;)
我有这个查询:
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();
我想从结果列表中取出计数的整数值。
如果我写 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.next(BaseLazyLoadItemList.java:180)
at java.util.AbstractCollection.toArray(AbstractCollection.java:195)
at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1059)
如何获取 int 值?
将 count(*)
替换为 count({or:Pk})
并将灵活搜索查询的结果 class 设置为 Integer
像这样 query.setResultClassList(Collections.singletonList(Integer.class));
我是这样解决的:
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.");
}
}
//.....
解决方法类似;)