Support new core style.
diff --git a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
index f0312d5..450c211 100644
--- a/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
+++ b/oal-parser/src/main/java/org/apache/skywalking/oal/tool/parser/SourceColumnsFactory.java
@@ -30,13 +30,13 @@
             case "Service":
                 columnList = new LinkedList<>();
                 // Service id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 return columnList;
             case "ServiceInstance":
                 columnList = new LinkedList<>();
                 // Service instance id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 SourceColumn serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(serviceIdColumn);
@@ -44,7 +44,7 @@
             case "Endpoint":
                 columnList = new LinkedList<>();
                 // Endpoint id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 serviceIdColumn = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(serviceIdColumn);
@@ -57,42 +57,37 @@
             case "ServiceInstanceJVMGC":
                 columnList = new LinkedList<>();
                 // Service instance id;
-                idColumn = new SourceColumn("id", "id", int.class, true);
+                idColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(idColumn);
                 serviceInstanceIdColumn = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
                 columnList.add(serviceInstanceIdColumn);
                 return columnList;
             case "ServiceRelation":
                 columnList = new LinkedList<>();
-                SourceColumn sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, true);
+                SourceColumn sourceService = new SourceColumn("entityId", "source_service_id", String.class, true);
                 columnList.add(sourceService);
-                SourceColumn destService = new SourceColumn("destServiceId", "dest_service_id", int.class, true);
-                columnList.add(destService);
                 return columnList;
             case "ServiceInstanceRelation":
                 columnList = new LinkedList<>();
+                sourceService = new SourceColumn("entityId", "entity_id", String.class, true);
+                columnList.add(sourceService);
                 sourceService = new SourceColumn("sourceServiceId", "source_service_id", int.class, false);
                 columnList.add(sourceService);
-                destService = new SourceColumn("destServiceId", "dest_service_id", int.class, false);
+                SourceColumn destService = new SourceColumn("destServiceId", "destServiceId", int.class, false);
                 columnList.add(destService);
-                SourceColumn sourceServiceInstance = new SourceColumn("sourceServiceInstanceId", "source_service_instance_id", int.class, true);
-                columnList.add(sourceServiceInstance);
-                SourceColumn destServiceInstance = new SourceColumn("destServiceInstanceId", "dest_service_instance_id", int.class, true);
-                columnList.add(destServiceInstance);
+
                 return columnList;
             case "EndpointRelation":
                 columnList = new LinkedList<>();
-                SourceColumn sourceEndpointColumn = new SourceColumn("endpointId", "endpoint_id", int.class, true);
+                SourceColumn sourceEndpointColumn = new SourceColumn("entityId", "entity_id", String.class, true);
                 columnList.add(sourceEndpointColumn);
-                SourceColumn childEndpointColumne = new SourceColumn("childEndpointId", "child_endpoint_id", int.class, true);
-                columnList.add(childEndpointColumne);
                 sourceService = new SourceColumn("serviceId", "service_id", int.class, false);
                 columnList.add(sourceService);
                 destService = new SourceColumn("childServiceId", "child_service_id", int.class, false);
                 columnList.add(destService);
-                sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
+                SourceColumn sourceServiceInstance = new SourceColumn("serviceInstanceId", "service_instance_id", int.class, false);
                 columnList.add(sourceServiceInstance);
-                destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false);
+                SourceColumn destServiceInstance = new SourceColumn("childServiceInstanceId", "child_service_instance_id", int.class, false);
                 columnList.add(destServiceInstance);
                 return columnList;
             default:
diff --git a/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl b/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
index 288de69..6576b3a 100644
--- a/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
+++ b/oal-parser/src/main/resources/code-templates/IndicatorImplementor.ftl
@@ -56,7 +56,11 @@
         String splitJointId = String.valueOf(getTimeBucket());
 <#list fieldsFromSource as sourceField>
     <#if sourceField.isID()>
+        <#if sourceField.getTypeName() == "String">
+        splitJointId += Const.ID_SPLIT + ${sourceField.fieldName};
+        <#else>
         splitJointId += Const.ID_SPLIT + String.valueOf(${sourceField.fieldName});
+        </#if>
     </#if>
 </#list>
         return splitJointId;
@@ -66,13 +70,32 @@
         int result = 17;
 <#list fieldsFromSource as sourceField>
     <#if sourceField.isID()>
-        result = 31 * result + ${sourceField.fieldName};
+        <#if sourceField.getTypeName() == "String">
+        result = 31 * result + ${sourceField.fieldName}.hashCode();
+        <#else>
+        result += Const.ID_SPLIT + ${sourceField.fieldName};
+        </#if>
     </#if>
 </#list>
         result = 31 * result + (int)getTimeBucket();
         return result;
     }
 
+
+    @Override public int remoteHashCode() {
+        int result = 17;
+<#list fieldsFromSource as sourceField>
+    <#if sourceField.isID()>
+        <#if sourceField.getTypeName() == "String">
+        result = 31 * result + ${sourceField.fieldName}.hashCode();
+        <#else>
+        result += Const.ID_SPLIT + ${sourceField.fieldName};
+        </#if>
+    </#if>
+</#list>
+        return result;
+    }
+
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -146,7 +169,7 @@
     }
 
     @Override public AlarmMeta getAlarmMeta() {
-        return new AlarmMeta("${varName}", Scope.${sourceName}<#if (fieldsFromSource?size>0) >, <#list fieldsFromSource as field>${field.fieldName}<#if field_has_next>, </#if></#list></#if>);
+        return new AlarmMeta("${varName}", Scope.${sourceName}<#if (fieldsFromSource?size>0) ><#list fieldsFromSource as field><#if field.isID()>, ${field.fieldName}</#if></#list></#if>);
     }
 
     @Override