2016-06-30 4 views
1

내가 코드 블록의 범위를 벗어난 내 트랜잭션을 제어 할 수 싶습니다 그러나 나는이JOOQ 거래

DSL.using(configuration) 
    .transaction(ctx -> { 
     DSL.using(ctx) 
      .update(TABLE) 
      .set(TABLE.COL, newValue) 
      .where(...) 
      .execute(); 
}); 

같은 DSLContext 및 람다와 DefaultTransactionProvider을 사용할 수 있다는 인식 (하지만 여전히 사용하고 있습니다 DefaultTransactionProvider 체크 포인트와 그 행동으로 내가 뭘 찾고 있어요). 더 좋아요

configuration.transactionProvider().begin(transactionContext); 
DSL.using(configuration) 
    .update(TABLE) 
    .set(TABLE.COL, newValue) 
    .where(...) 
    .execute(); 
configuration.transactionProvider().commit(transactionContext); 

가능합니까? 아니면 이것을 수행하기 위해 트랜잭션 SPI를 직접 구현해야합니까?

답변

1

jOOQ 3.8부터는이 기능을 사용할 수 없습니다. https://github.com/jOOQ/jOOQ/issues/5376

귀하의 코드는 아마 작동합니다 :

configuration.transactionProvider().begin(transactionContext); 
DSL.using(configuration) 
    .update(TABLE)... 
configuration.transactionProvider().commit(transactionContext); 

하지만 SPI 방법이 아닌 API 메소드를 호출하고 있다는 조심 보류 기능이에 대한 요구가있다. 이 메소드는 API 사용자로서 직접 액세스 할 수 있도록 설계되지 않았습니다. 이것들은 Configuration의 jOOQ SPI 컨텍스트에 대한 구현 및 주입을 위해 설계되었습니다. 이 경로를 계속하려면 TransactionProviderConfiguration.connectionProvider()에 액세스하고 commit() 또는 rollback()이 호출 될 때까지 항상 올바른 연결을 생성하기 위해 상태를 수정해야합니다.

는 jOOQ 사용자 그룹에 또한 관련 설명을 참조하십시오 : https://groups.google.com/forum/#!msg/jooq-user/1JwWMChD2SM/NHUhSnI8AgAJ

+0

덕분에, 내가 그 기능에 눈을하겠습니다. – kag0