
# 应用的ID类型切换为文本类型有什么影响？
#### 背景信息
在工业数字化转型背景下，异构系统集成与数据标准化的需求日益增强。工业应用中常常需要对接遵循不同编码规范的设备与系统。例如，现场传感器通常使用符合ISO 15926标准的文本型资产编码，而传统的SCADA系统则采用数值型设备ID。如果强制统一使用单一类型的ID，可能会引发以下问题：
- 兼容性风险：可能破坏OPC UA信息模型的语义一致性，进而影响Modbus TCP协议的通信稳定性。
- 性能损耗：数值型ID在处理复杂业务编码场景时，需要进行额外的类型转换，影响实时数据处理的效率。
- 业务适配性差：难以满足实际业务中的个性化需求，例如产品追溯中需要嵌入字母与数字的批次号。
对于上述问题，工业数字模型驱动引擎-数据建模引擎（xDM Foundation，简称xDM-F）支持用户根据具体业务场景自主决策ID字段类型，实现灵活配置。该特性不仅保障了系统的稳定性，还提升了工业数据管理的灵活性与扩展性，更好地适应多样化的工业应用场景。
#### 解决方案
1. 在JDK 17版本中，与唯一编码ID相关的所有属性均已从数值类型（如Long）调整为文本类型（如String）。因此，当用户选择JDK 17版本进行应用发布后，需要根据不同的应用运行态使用场景进行如下调整：
   
   | 使用场景          | 解决方案                                                                                                                | 修正示例                                                                                                                      |
   |:---|:---|:---|
   | 全量数据服务API调用场景 | 建议对全量数据服务API的调用场景进行优化，具体措施为：将所有接口参数中涉及ID的属性字段由数值类型统一调整为字符串类型，包括：请求体、响应体及查询参数中的ID字段。通过此操作解决ID字段类型不匹配问题，提升接口的兼容性与稳定性。 | ``` id: 12345 → id: "12345" ```                                                                                           |
   | 数据管理API代理器场景  | 将所有涉及ID的属性从数值类型（如Long id）调整为文本类型（如String id），以解决由于类型不匹配引起的编译错误（如Long无法转换为String）。                                   | ``` // 原代码 public void updateItem(Long id, Item item) {...} // 修正后 public void updateItem(String id, Item item) {...} ``` |
   | 数据建模引擎运行SDK场景 | 将所有涉及ID的属性从数值类型（如Long id）调整为文本类型（如String id），以解决由于类型不匹配引起的编译错误（如Long无法转换为String）。                                   | ``` // 原代码 public Long createEntity(Entity entity) {...} // 修正后 public String createEntity(Entity entity) {...} ```       |
      
   此外，对于已使用服务编排管理功能的现有用户，还需确保相关功能的代码已完成相应调整，以保证整个系统的兼容性和一致性。
   
2. 在iDME控制台创建或编辑应用时，支持通过应用级配置项自定义设置唯一编码ID类型，以便更好地满足业务需求。
   为了确保系统的稳定性和一致性，在定义ID类型时存在如下规则与限制：
   - 如果用户选择将应用的"ID类型"设置为"文本"类型，后续将不支持修改为"数值"类型。
   
   - 应用一旦将"ID类型"设置为"文本"类型，仅支持发布JDK 17版本，不支持发布JDK 8版本。
   
   - 选择"文本"类型后，系统将自动将数据库中所有ID相关的属性从数值类型（如BIGINT）转换为文本类型（如VARCHAR）。
   
   - "文本"类型的最大长度为40个字符，且仅允许输入数字、字母、连字符（-）和下划线（_）。
   
   - 如果应用的数据库类型为MySQL，且实体模型的属性总长度接近数据库的极限值（如总字节数接近限制值16000），切换ID类型可能会失败。建议在设置为"文本"类型之前，检查是否存在复杂模型。如果存在，需先调整属性的总长度，再进行ID类型的切换操作。
   
   - 用户将应用从"数值"类型切换为"文本"类型后，首次部署的时间可能较长（复杂模型较多时，可能需要约2小时）。为了减少对现有应用的影响，建议用户通过创建新应用的方式来切换ID类型。
     
3. 对于已购买SDK服务的用户，如果需要切换应用的ID类型，请通过[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)的方式联系我们。
 
