A connection in local transaction has a default holdability of HOLD_CURSORS_OVER_COMMIT. When this connection becomes part of a global transaction, Derby internally switches its holdability to CLOSE_CURSORS_AT_COMMIT (this is because in Derby, holdable cursors do not work with XA transactions). When this connection returns back to local transaction, its holdability should automatically get switched to HOLD_CURSORS_OVER_COMMIT. When running under jdk13, Derby does not perform the last step of restoring the connection holdability. I have attached a program to reporduce this behavior. If this program is run under jdk14, the holdability is restored as expected.