Skip to content

Commit

Permalink
fixed DAO write errors when collection contains documents with duplic…
Browse files Browse the repository at this point in the history
…ate _id
  • Loading branch information
albogdano committed May 5, 2023
1 parent e0dc045 commit 9b4aab4
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -206,7 +207,7 @@ public <P extends ParaObject> void createAll(String appid, List<P> objects) {
}
try {
List<Document> documents = new ArrayList<Document>();
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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));
}

}

0 comments on commit 9b4aab4

Please sign in to comment.