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

2020-09-14 18:14发布

         点击此处--->   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;

  

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

谢谢。

         点击此处--->   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条回答
悻福寶寶
1楼 · 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();
  }
  
bbpeas
2楼-- · 2020-09-14 19:10

那不是异常抛出,但在sap初始化时,hana必须创建BOOLEAN类型可销售的字段,如在SAP数据库的类型声明中指出的那样,但仍创建DECIMAL之类的字段。 之后,该查询无法运行并引发异常,因为它无法将DECIMAL与BOOLEAN值进行比较。 最后,在声明时使用redeclare属性不会更改数据库字段类型,这是核心问题。

何必丶何苦呢
3楼-- · 2020-09-14 19:11

我已经尝试了以下代码段。 这对我来说可以。 使用SAP Hana和Hybris 6.7。 但这是我在自定义核心中的"产品"项目类型下声明的

  
                      <修饰符read =" true" write =" true" search =" true"可选=" false"/>
                      验证产品是否可销售
                       Boolean.TRUE 
                      
                  
  
空代码
4楼-- · 2020-09-14 18:49

这对我来说是行不通的,因为您创建了一个新属性,但是我需要为产品模型中的现有属性重新声明数据库类型,该模型必须在hana数据库BOOLEAN中具有列类型,而不是 十进制。 Hybris在oracle数据库中将布尔类型自动转换为INT类型,但在hana数据库中则不会。

一周热门 更多>