FAQ
Hi all,

is there a way to set the transaction isolation level for a single query?

I mean, something to do when I perform a ObjectContext.performQuery(query);

Thank you very much
Best
cghersi

Search Discussions

  • Andrus Adamchik at Nov 22, 2013 at 4:37 pm
    Globally you can often set it up at the connection pool level. E.g. with Tomcat pool [1] you’d use ‘defaultTransactionIsolation’ property. If you need to change that for a single query, you need to poke inside Transaction API of Cayenne (something you rarely have to do under normal circumstances)… Here is a 3.2 way:

    List<Artist> results = serverRuntime.performInTransaction(new TransactionalOperation<List<Artist>>() {
        public List<Artist> perform() {

            // this is the ugly part..
            Transaction.getThreadTransaction().setDelegate(new TransactionDelegate() {

                public boolean willAddConnection(Transaction transaction, Connection connection) {
                    connection.setTransactionIsolation(..);
                    return true;
                }

                // a bunch of empty delegate methods follow...
            });

            return context.performQuery(query);
        }
    });

    I hate the TransactionDelegate API, and we’ll have something better in place eventually, but for now this is the cleanest option.

    Andrus


    [1] http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

    On Nov 22, 2013, at 6:13 PM, Cristiano Ghersi wrote:

    Hi all,

    is there a way to set the transaction isolation level for a single query?

    I mean, something to do when I perform a ObjectContext.performQuery(query);

    Thank you very much
    Best
    cghersi

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupdev @
categoriescayenne
postedNov 22, '13 at 3:14p
activeNov 22, '13 at 4:37p
posts2
users2
websitecayenne.apache.org

People

Translate

site design / logo © 2022 Grokbase