diff --git a/jOOQ/src/main/java/org/jooq/TransactionalCallable.java b/jOOQ/src/main/java/org/jooq/TransactionalCallable.java
index b66727f3e8..d1c358a1f8 100644
--- a/jOOQ/src/main/java/org/jooq/TransactionalCallable.java
+++ b/jOOQ/src/main/java/org/jooq/TransactionalCallable.java
@@ -37,6 +37,10 @@
*/
package org.jooq;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.stream.Collector;
+
/**
* An FunctionalInterface that wraps transactional code.
*
@@ -71,4 +75,50 @@ public interface TransactionalCallable
@@ -70,4 +73,27 @@ public interface TransactionalRunnable {
* before executing this TransactionalCallable.
*/
T run(Configuration configuration) throws Throwable;
+
+
+
+ /**
+ * Wrap a set of nested {@link TransactionalCallable} objects in a single
+ * global {@link TransactionalCallable}, returning the last callable's
+ * result.
+ */
+ @SafeVarargs
+ static FunctionalInterface that wraps transactional code.
* TransactionalRunnable.
*/
void run(Configuration configuration) throws Throwable;
+
+
+
+ /**
+ * Wrap a set of nested {@link TransactionalRunnable} objects in a single
+ * global {@link TransactionalRunnable}.
+ */
+ static TransactionalRunnable of(TransactionalRunnable... runnables) {
+ return of(Arrays.asList(runnables));
+ }
+
+ /**
+ * Wrap a set of nested {@link TransactionalRunnable} objects in a single
+ * global {@link TransactionalRunnable}.
+ */
+ static TransactionalRunnable of(Collection extends TransactionalRunnable> runnables) {
+ return configuration -> {
+ for (TransactionalRunnable runnable : runnables)
+ configuration.dsl().transaction(runnable);
+ };
+ }
+
+
}