diff --git a/objectbox-java/src/main/java/io/objectbox/Box.java b/objectbox-java/src/main/java/io/objectbox/Box.java index 6ee52587..b9aaa6b7 100644 --- a/objectbox-java/src/main/java/io/objectbox/Box.java +++ b/objectbox-java/src/main/java/io/objectbox/Box.java @@ -401,6 +401,34 @@ public void put(@Nullable Collection entities) { } } + /** + * Puts the given entities in a box using a single transaction. + * + * @param entities It is fine to pass null or an empty collection: + * this case is handled efficiently without overhead. + * + * @return list of saved entities ids + */ + public Collection putAndGetIds(@Nullable Collection entities) { + if (entities == null || entities.isEmpty()) { + return Collections.emptyList(); + } + + Collection ids = new ArrayList<>(); + Cursor cursor = getWriter(); + try { + for (T entity : entities) { + ids.add(cursor.put(entity)); + } + commitWriter(cursor); + } catch (Exception e) { + ids = Collections.emptyList(); + } finally { + releaseWriter(cursor); + } + return ids; + } + /** * Removes (deletes) the Object by its ID. */