diff --git a/src/main/java/com/google/gwtorm/jdbc/AccessGen.java b/src/main/java/com/google/gwtorm/jdbc/AccessGen.java
index 7cba532..3066f73 100644
--- a/src/main/java/com/google/gwtorm/jdbc/AccessGen.java
+++ b/src/main/java/com/google/gwtorm/jdbc/AccessGen.java
@@ -736,20 +736,22 @@
       if (hasLimitParam || !dialect.selectHasLimit()) {
         mv.visitVarInsn(ALOAD, psvar);
         if (hasLimitParam) {
-          CodeGenSupport cgs2 = new CodeGenSupport(mv) {
-            @Override
-            public void pushSqlHandle() {
-              mv.visitVarInsn(ALOAD, psvar);
-            }
+          if (dialect.selectHasLimit()) {
+            CodeGenSupport cgs2 = new CodeGenSupport(mv) {
+              @Override
+              public void pushSqlHandle() {
+                mv.visitVarInsn(ALOAD, psvar);
+              }
 
-            @Override
-            public void pushFieldValue() {
-              final int n = argIdx[0];
-              loadVar(pTypes[n], pVars[n]);
-            }
-          };
-          cgs2.resetColumnIndex(cgs.getColumnIndex() + 1);
-          dialect.getSqlTypeInfo(Integer.TYPE).generatePreparedStatementSet(cgs2);
+              @Override
+              public void pushFieldValue() {
+                final int n = argIdx[0];
+                loadVar(pTypes[n], pVars[n]);
+              }
+            };
+            cgs2.resetColumnIndex(cgs.getColumnIndex() + 1);
+            dialect.getSqlTypeInfo(Integer.TYPE).generatePreparedStatementSet(cgs2);
+          }
           mv.visitVarInsn(ILOAD, pVars[pTypes.length - 1]);
         } else {
           cgs.push(info.getStaticLimit());
diff --git a/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java b/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
index c7c5b5a..188b833 100644
--- a/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
+++ b/src/main/java/com/google/gwtorm/jdbc/JdbcSchema.java
@@ -51,7 +51,9 @@
   @Override
   public void commit() throws OrmException {
     try {
-      conn.commit();
+      if (!conn.getAutoCommit()) {
+        conn.commit();
+      }
     } catch (SQLException err) {
       throw new OrmException("Cannot commit transaction", err);
     } finally {
@@ -66,7 +68,9 @@
   @Override
   public void rollback() throws OrmException {
     try {
-      conn.rollback();
+      if (!conn.getAutoCommit()) {
+        conn.rollback();
+      }
     } catch (SQLException err) {
       throw new OrmException("Cannot rollback transaction", err);
     } finally {
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
index ce37fbe..c46f86b 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectH2Test.java
@@ -224,6 +224,19 @@
   }
 
   @Test
+  public void testRollbackNoTransaction() throws SQLException, OrmException {
+    PhoneBookDb schema = phoneBook.open();
+    schema.updateSchema(executor);
+    ArrayList<Person> all = new ArrayList<Person>();
+    all.add(new Person(new Person.Key("Bob"), 18));
+    schema.people().insert(all);
+    schema.commit();
+    schema.rollback();
+    List<Person> r = schema.people().olderThan(10).toList();
+    assertEquals(1, r.size());
+  }
+
+  @Test
   public void testCommitTransaction() throws SQLException, OrmException {
     PhoneBookDb schema = phoneBook.open();
     schema.updateSchema(executor);
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
index 7be69a4..e092e56 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectMySQLTest.java
@@ -243,6 +243,19 @@
   }
 
   @Test
+  public void testRollbackNoTransaction() throws SQLException, OrmException {
+    PhoneBookDb schema = phoneBook.open();
+    schema.updateSchema(executor);
+    ArrayList<Person> all = new ArrayList<Person>();
+    all.add(new Person(new Person.Key("Bob"), 18));
+    schema.people().insert(all);
+    schema.commit();
+    schema.rollback();
+    List<Person> r = schema.people().olderThan(10).toList();
+    assertEquals(1, r.size());
+  }
+
+  @Test
   public void testCommitTransaction() throws SQLException, OrmException {
     PhoneBookDb schema = phoneBook.open();
     schema.updateSchema(executor);
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
index 16baae4..f0ced86 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectOracleSQLTest.java
@@ -244,6 +244,19 @@
   }
 
   @Test
+  public void testRollbackNoTransaction() throws SQLException, OrmException {
+    PhoneBookDb schema = phoneBook.open();
+    schema.updateSchema(executor);
+    ArrayList<Person> all = new ArrayList<Person>();
+    all.add(new Person(new Person.Key("Bob"), 18));
+    schema.people().insert(all);
+    schema.commit();
+    schema.rollback();
+    List<Person> r = schema.people().olderThan(10).toList();
+    assertEquals(1, r.size());
+  }
+
+  @Test
   public void testCommitTransaction() throws SQLException, OrmException {
     PhoneBookDb schema = phoneBook.open();
     schema.updateSchema(executor);
diff --git a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
index 3b2ca6a..ef0a067 100644
--- a/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
+++ b/src/test/java/com/google/gwtorm/schema/sql/DialectPostgreSQLTest.java
@@ -54,9 +54,9 @@
   public void setUp() throws Exception {
     Class.forName(org.postgresql.Driver.class.getName());
 
-    final String database = "gwtorm";
-    final String user = "gwtorm";
-    final String pass = "gwtorm";
+    final String database = "reviewdb";
+    final String user = "gerrit2";
+    final String pass = "reviewdb";
 
     try {
       db = DriverManager.getConnection("jdbc:postgresql:" + database, user, pass);
@@ -242,6 +242,19 @@
   }
 
   @Test
+  public void testRollbackNoTransaction() throws SQLException, OrmException {
+    PhoneBookDb schema = phoneBook.open();
+    schema.updateSchema(executor);
+    ArrayList<Person> all = new ArrayList<Person>();
+    all.add(new Person(new Person.Key("Bob"), 18));
+    schema.people().insert(all);
+    schema.commit();
+    schema.rollback();
+    List<Person> r = schema.people().olderThan(10).toList();
+    assertEquals(1, r.size());
+  }
+
+  @Test
   public void testCommitTransaction() throws SQLException, OrmException {
     PhoneBookDb schema = phoneBook.open();
     schema.updateSchema(executor);
