diff --git a/src/main/java/com/erudika/para/server/persistence/MongoDBDAO.java b/src/main/java/com/erudika/para/server/persistence/MongoDBDAO.java
index 54be20c..1d88bbd 100644
--- a/src/main/java/com/erudika/para/server/persistence/MongoDBDAO.java
+++ b/src/main/java/com/erudika/para/server/persistence/MongoDBDAO.java
@@ -43,6 +43,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -206,7 +207,7 @@ public
void createAll(String appid, List
objects) {
}
try {
List documents = new ArrayList();
- for (ParaObject so : objects) {
+ for (ParaObject so : new LinkedHashSet<>(objects)) { // fix duplicate _id errors by using a set
if (so != null) {
if (StringUtils.isBlank(so.getId())) {
so.setId(MongoDBUtils.generateNewId());
diff --git a/src/test/java/com/erudika/para/server/persistence/MongoDBDAOIT.java b/src/test/java/com/erudika/para/server/persistence/MongoDBDAOIT.java
index 76e3d46..b1ebfde 100644
--- a/src/test/java/com/erudika/para/server/persistence/MongoDBDAOIT.java
+++ b/src/test/java/com/erudika/para/server/persistence/MongoDBDAOIT.java
@@ -17,12 +17,12 @@
*/
package com.erudika.para.server.persistence;
-import com.erudika.para.server.persistence.MongoDBDAO;
-import com.erudika.para.server.persistence.MongoDBUtils;
import com.erudika.para.core.Sysprop;
+import java.util.List;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
@@ -130,4 +130,34 @@ public void testFieldNameSanitization() {
d.delete(s1);
}
+ @Test
+ public void testInsertManyWithIdDuplication() {
+ MongoDBDAO d = ((MongoDBDAO) dao());
+ Sysprop s1 = new Sysprop("id:one");
+ Sysprop s2 = new Sysprop("id:two");
+ Sysprop s3 = new Sysprop("id:two");
+ Sysprop s4 = new Sysprop("id:three");
+
+ d.createAll(List.of(s1, s2, s3, s4));
+
+ assertNotNull(d.read(s1.getId()));
+ assertNotNull(d.read(s2.getId()));
+ assertNotNull(d.read(s3.getId()));
+ assertNotNull(d.read(s4.getId()));
+
+ s1.setName("updated");
+ s2.setName("updated");
+ s3.setName("updated");
+ s4.setName("updated");
+
+ d.updateAll(List.of(s1, s2, s3, s4));
+
+ assertEquals("updated", d.read(s1.getId()).getName());
+ assertEquals("updated", d.read(s2.getId()).getName());
+ assertEquals("updated", d.read(s3.getId()).getName());
+ assertEquals("updated", d.read(s4.getId()).getName());
+
+ d.deleteAll(List.of(s1, s2, s3, s4));
+ }
+
}