code: public T read(final K key) throws SQLException {
          return
              transactionTemplate
                  .doInTransaction(new SQLFunction<Connection, T>() {
                      @Override
                      public T apply(Connection connection) throws SQLException {
                          return delegate.read(connection, key);
                      }
                  });
      }
docs: retrieve the object with the specified key.
  
  @param key        the key
  @return the object or null if not found
  @throws SQLException if an error occurs