SAP HANA问题通过查询中的布尔字段

2020-09-14 18:14发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)您好,我们在使用Sap Hana...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好,我们在使用Sap Hana数据库的测试环境中遇到问题。 当我们进行结帐的第一步时,就会发生问题。 我们的应用程序是具有6.7.0.3 hybris版本和OOTB配置(带有小程序个性化设置)的Marketplace。 该问题发生在hybris平台拥有的针对产品模型可销售字段的查询中。 SAP建议通过重新定义具有SAP数据库特定定义的属性类型的解决方法,如下所述:

  
       <属性>
          
             
                
                    BOOLEAN 
                
             
          
       
     

  

初始化系统后,此方法无效,并返回与下一个描述类似的错误:

  com.sap.db.jdbc.exceptions.JDBCDriverException:SAP DBTech JDBC:[266]:不一致的数据类型:BOOLEAN类型与DECIMAL类型不兼容。:第1列第187行(位置186)
      在com.sap.db.jdbc.exceptions.SQLExceptionSapDB._newInstance(SQLExceptionSapDB.java:201)
      在com.sap.db.jdbc.exceptions.SQLExceptionSapDB.newInstance(SQLExceptionSapDB.java:45)
      在com.sap.db.jdbc.packet.HReplyPacket._buildExceptionChain(HReplyPacket.java:934)
      在com.sap.db.jdbc.packet.HReplyPacket.getSQLExceptionChain(HReplyPacket.java:130)
      在com.sap.db.jdbc.packet.HPartInfo.getSQLExceptionChain(HPartInfo.java:39)
      在com.sap.db.jdbc.ConnectionSapDB._receive(ConnectionSapDB.java:3079)
      在com.sap.db.jdbc.ConnectionSapDB.exchange(ConnectionSapDB.java:1642)
      在com.sap.db.jdbc.PreparedStatementSapDB._prepare(PreparedStatementSapDB.java:2745)
      在com.sap.db.jdbc.PreparedStatementSapDB._doParse(PreparedStatementSapDB.java:2667)
      在com.sap.db.jdbc.PreparedStatementSapDB。(PreparedStatementSapDB.java:132)
      在com.sap.db.jdbc.PreparedStatementSapDBFinalize。(PreparedStatementSapDBFinalize.java:37)
      在com.sap.db.jdbc.PreparedStatementSapDBFinalize.newInstance(PreparedStatementSapDBFinalize.java:23)
      在com.sap.db.jdbc.ConnectionSapDB._prepareStatement(ConnectionSapDB.java:2917)
      在com.sap.db.jdbc.ConnectionSapDB.prepareStatement(ConnectionSapDB.java:254)


  

查询产生错误是在平台上在java文件DefaultMarketplaceCartEntryDao.java上,并且看起来像这样:

 受保护的静态最终字符串FIND_UNSALEBALE_CARTENTRIES_IN_CART ="从{"中选择{A:" + CartEntryModel.PK +"}
          + CartEntryModel._TYPECODE +"作为一个联接" + ProductModel._TYPECODE +"在{A:"上按AS + + CartEntryModel.PRODUCT +"} = {B:"
          + ProductModel.PK +"} JOIN" + CartModel._TYPECODE
          +"作为{A:"上的C + + CartEntryModel.ORDER +"} = {C:" + CartModel.PK +"}}在{B:" + ProductModel.SALEABLE
          +"} = false和{C:" + CartModel.CODE +"} =?"  + CART_CODE;

  

有人知道解决方法或解决方案吗?

谢谢。

4条回答
悻福寶寶
2020-09-14 19:12 .采纳回答

我们只是找到一种局部解决方案,方法是更改​​查询,用查询内部参数集接收到的BOOLEAN值替换查询中的错误值。 这是部分解决方案,因为我们应该用布尔参数替换内部具有false/true值的所有查询。 对于比将布尔字段与0或1进行比较的查询没有问题,它在sap hana上运行良好,但仅在具有true/false值的情况下失败。

接下来是在我们特定情况下此查询的解决方案:

 受保护的静态最终字符串CART_CODE =" code";

  受保护的静态最终字符串PRODUCT_SALEABLE =" saleable";

  受保护的静态最终字符串FIND_UNSALEBALE_CARTENTRIES_IN_CART ="从{"中选择{A:" + CartEntryModel.PK +"}
          + CartEntryModel._TYPECODE +"作为一个联接" + ProductModel._TYPECODE +"在{A:"上按AS + + CartEntryModel.PRODUCT +"} = {B:"
          + ProductModel.PK +"} JOIN" + CartModel._TYPECODE +"作为{A:"上的C + + CartEntryModel.ORDER +"} = {C:" + CartModel.PK
          +"}}在哪里{B:" + ProductModel.SALEABLE +"} =?"  + PRODUCT_SALEABLE +"和{C:" + CartModel.CODE +"} =?"  + CART_CODE;

  @Override
  公共列表 findUnSaleableCartEntries(最终购物车模型购物车)
  {
      validateParameterNotNull(cart,"购物车不能为空");
      最终的FlexibleSearchQuery查询=新的FlexibleSearchQuery(FIND_UNSALEBALE_CARTENTRIES_IN_CART);
     //query.addQueryParameter(CART_CODE,cart.getCode());
      最终Map 参数= new HashMap <>();
      params.put(CART_CODE,cart.getCode());
      params.put(PRODUCT_SALEABLE,Boolean.FALSE);
      query.addQueryParameters(params);
      返回getFlexibleSearchService()。 search(query).getResult();
  }
  

一周热门 更多>