2017-03-17 12 views
1

を命令私はこのようなクエリを有する:チェーン及び作曲Jooqは

  1. 行を選択し(複数その1つの価値がある)上の行からの値を持つ行を作成します。

技術的には、1つのSQLリクエストで表現することは可能ですが、 とjooqでは、アプリケーションとdbサーバーの間に往復の値があります。

jooq.select(TABLE_A.FIELD_A, TABLE_A.FIELD_B).from(TABLE_A)     
      .where(TABLE_A.ID.eq(id)) 
      .fetchOne().map(r -> 
      jooq.insertInto(AUDIT) 
      .columns(AUDIT.FIELD_A, AUDIT.FIELD_B) 
      .values(r.value1(), r.value2()).execute()) 


select field_a, field_b into @a, @b from TABLE where ID = ?; 
insert into AUDIT (field_a, field_b) values(@a, @b); 

これはデモクエリです。私は、特定のクエリの回避策ではなく、作成を手助けするツールに興味があります。

+0

はあなたが何を意味するか少し説明することができます「構成する」と「回避策」によって例えば。なぜあなたの提案は興味深いものではありませんか?理想的なソリューションはどのように見えますか? –

答えて

0

jOOQは、INSERT .. SELECTをサポートします。次の2つの文の間のクライアントの往復を持っているが、代わりにこれを書くべきではありません。

SQL:

insert into AUDIT (FIELD_A, FIELD_B) 
select FIELD_A, FIELD_B from TABLE where ID = ?; 

のJava:

jooq.insertInto(AUDIT, AUDIT.FIELD_A, AUDIT.FIELD_B) 
    .select(DSL.select(TABLE.FIELD_A, TABLE.FIELD_B) 
       .from(TABLE) 
       .where(TABLE.ID.eq(id))) 
    .execute();