diff --git a/pom.xml b/pom.xml
index b9cfa06..a9fc466 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>com.baidu.hugegraph</groupId>
     <artifactId>hugegraph-loader</artifactId>
-    <version>0.7.0</version>
+    <version>0.8.0</version>
 
     <properties>
         <release.name>hugegraph-loader</release.name>
diff --git a/src/main/java/com/baidu/hugegraph/loader/parser/EdgeParser.java b/src/main/java/com/baidu/hugegraph/loader/parser/EdgeParser.java
index f83965d..67220c5 100644
--- a/src/main/java/com/baidu/hugegraph/loader/parser/EdgeParser.java
+++ b/src/main/java/com/baidu/hugegraph/loader/parser/EdgeParser.java
@@ -19,7 +19,6 @@
 
 package com.baidu.hugegraph.loader.parser;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -82,7 +81,7 @@
                                  List<String> fieldNames,
                                  Map<String, Object> keyValues) {
         List<String> primaryKeys = vertexLabel.primaryKeys();
-        List<Object> primaryValues = new ArrayList<>(primaryKeys.size());
+        Object[] primaryValues = new Object[primaryKeys.size()];
         for (String fieldName : fieldNames) {
             if (!keyValues.containsKey(fieldName)) {
                 continue;
@@ -110,7 +109,7 @@
                 // The id strategy of source/target label must be PRIMARY_KEY
                 if (primaryKeys.contains(key)) {
                     int index = primaryKeys.indexOf(key);
-                    primaryValues.add(index, value);
+                    primaryValues[index] = value;
                 }
             }
         }
diff --git a/src/main/java/com/baidu/hugegraph/loader/parser/ElementParser.java b/src/main/java/com/baidu/hugegraph/loader/parser/ElementParser.java
index a39ea5e..b28b52e 100644
--- a/src/main/java/com/baidu/hugegraph/loader/parser/ElementParser.java
+++ b/src/main/java/com/baidu/hugegraph/loader/parser/ElementParser.java
@@ -151,8 +151,8 @@
     }
 
     protected String spliceVertexId(VertexLabel vertexLabel,
-                                    List<Object> primaryValues) {
-        E.checkArgument(vertexLabel.primaryKeys().size() == primaryValues.size(),
+                                    Object[] primaryValues) {
+        E.checkArgument(vertexLabel.primaryKeys().size() == primaryValues.length,
                         "Missing some primary key columns, expect %s, " +
                         "but only got %s for vertex label '%s'",
                         vertexLabel.primaryKeys(), primaryValues, vertexLabel);
diff --git a/src/main/java/com/baidu/hugegraph/loader/parser/VertexParser.java b/src/main/java/com/baidu/hugegraph/loader/parser/VertexParser.java
index bd2fbc8..ba6127e 100644
--- a/src/main/java/com/baidu/hugegraph/loader/parser/VertexParser.java
+++ b/src/main/java/com/baidu/hugegraph/loader/parser/VertexParser.java
@@ -19,7 +19,6 @@
 
 package com.baidu.hugegraph.loader.parser;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -85,7 +84,7 @@
         } else {
             assert isPrimaryKey(this.vertexLabel.idStrategy());
             List<String> primaryKeys = this.vertexLabel.primaryKeys();
-            List<Object> primaryValues = new ArrayList<>(primaryKeys.size());
+            Object[] primaryValues = new Object[primaryKeys.size()];
             for (Map.Entry<String, Object> entry : keyValues.entrySet()) {
                 String fieldName = entry.getKey();
                 Object fieldValue = entry.getValue();
@@ -95,7 +94,7 @@
 
                 if (primaryKeys.contains(key)) {
                     int index = primaryKeys.indexOf(key);
-                    primaryValues.add(index, value);
+                    primaryValues[index] = value;
                 }
             }
             String id = this.spliceVertexId(this.vertexLabel, primaryValues);
diff --git a/src/test/java/com/baidu/hugegraph/loader/test/functional/LoaderTest.java b/src/test/java/com/baidu/hugegraph/loader/test/functional/LoaderTest.java
index e7a42bd..be0abbf 100644
--- a/src/test/java/com/baidu/hugegraph/loader/test/functional/LoaderTest.java
+++ b/src/test/java/com/baidu/hugegraph/loader/test/functional/LoaderTest.java
@@ -509,6 +509,33 @@
         FileUtil.delete(path("vertex_person_number_id.csv"));
     }
 
+    @Test
+    public void testLoadVerticesWithJointPrimaryKeys() {
+        String line = FileUtil.newCSVLine("marko", 29, "Beijing");
+        FileUtil.append(path("vertex_person.csv"), line);
+
+        String[] args = new String[]{"-f", path("struct_joint_pk.json"),
+                                     "-s", path("schema_joint_pk.groovy"),
+                                     "-g", "hugegraph",
+                                     "--test-mode", "true"};
+        try {
+            HugeGraphLoader.main(args);
+        } catch (Exception e) {
+            Assert.fail("Should not throw exception, but throw " + e);
+        }
+
+        List<Vertex> vertices = client.graph().listVertices();
+
+        Assert.assertEquals(1, vertices.size());
+        Vertex vertex = vertices.get(0);
+
+        Assert.assertTrue(vertex.id().toString().contains("marko!Beijing"));
+        Assert.assertEquals("person", vertex.label());
+        Assert.assertEquals("marko", vertex.property("name"));
+        Assert.assertEquals(29, vertex.property("age"));
+        Assert.assertEquals("Beijing", vertex.property("city"));
+    }
+
     private static String path(String fileName) {
         return Paths.get(PATH_PREFIX, fileName).toString();
     }
diff --git a/src/test/resources/schema_joint_pk.groovy b/src/test/resources/schema_joint_pk.groovy
new file mode 100644
index 0000000..5e0616e
--- /dev/null
+++ b/src/test/resources/schema_joint_pk.groovy
@@ -0,0 +1,10 @@
+// Define schema
+schema.propertyKey("name").asText().ifNotExist().create();
+schema.propertyKey("age").asInt().ifNotExist().create();
+schema.propertyKey("city").asText().ifNotExist().create();
+schema.propertyKey("weight").asDouble().ifNotExist().create();
+schema.propertyKey("date").asText().ifNotExist().create();
+
+schema.vertexLabel("person").properties("name", "age", "city").primaryKeys("name", "city").ifNotExist().create();
+
+schema.edgeLabel("knows").sourceLabel("person").targetLabel("person").properties("date", "weight").ifNotExist().create();
diff --git a/src/test/resources/struct_joint_pk.json b/src/test/resources/struct_joint_pk.json
new file mode 100644
index 0000000..7bb6826
--- /dev/null
+++ b/src/test/resources/struct_joint_pk.json
@@ -0,0 +1,18 @@
+{
+  "vertices": [
+    {
+      "label": "person",
+      "input": {
+        "type": "file",
+        "path": "src/test/resources/vertex_person.csv",
+        "format": "CSV",
+        "charset": "UTF-8"
+      },
+      "mapping": {
+        "name": "name",
+        "age": "age",
+        "city": "city"
+      }
+    }
+  ]
+}
