2016-11-10 6 views
0

<updating-outbound-gateway>を使用して、nativeQueryを使用してレコードを挿入しています。 複数のレコードをDBに挿入できるようにするには、どのようにListに渡すことができますか?複数の行を挿入するにはupdate-outbound-gateway?

<int-jpa:updating-outbound-gateway native-query="insert into PARTNER_RESPONSE_DETAILS(PARTNER_ID,BANK_REFERENCE_NUMBER,REQUEST_STRING,RESPONSE_STRING,RESPONSE_DATE) values (:partnerId,:bankReferenceNumber,:requestString,:responseString,:responseDate)" 
 
entity-manager="entityManager"> 
 
<int-jpa:transactional /> 
 
<int-jpa:parameter name="partnerId" \t \t \t expression="payload['partnerId']" /> 
 
<int-jpa:parameter name="bankReferenceNumber" \t expression="payload['bankReferenceNumber']" /> 
 
<int-jpa:parameter name="requestString" \t \t expression="payload['requestString']" /> 
 
<int-jpa:parameter name="responseString" \t \t expression="payload['responseString']" /> 
 
<int-jpa:parameter name="transactionStatus" \t expression="payload['transactionStatus']" /> 
 
<int-jpa:parameter name="responseDate" \t \t \t expression="payload['responseDate']" /> 
 
</int-jpa:updating-outbound-gateway>

答えて

1

それが一括更新を実行するためにJPAネイティブクエリでは不可能であるので、<int-jpa:updating-outbound-gateway>は、その機能を提供していません。

ただし、通常のEntityManager.persist()でも可能です。

あなたは<splitter>の手前にある<int-jpa:updating-outbound-gateway>で修正できます。シングルスレッドでこれを行うと、すべてのレコードの後に​​TXがコミットされるまでDBコールは実行されません。

+0

ありがとうございましたArtem、どのように私はそれがすべての挿入後にコミットするようにマルチスレッドを実装できますか? –

+0

スプリッターの後の 'ExecutorChannel'。しかし、それはあなたがここで尋ねていることの完全に反対の話です... –

+0

私は挿入のためのリストに2つのレコードを持って、1つは正常に挿入され、2番目はSQL例外をスローする、それは両方のレコードをロールバックすべきですが、最初のレコードが例外をスローすると、何も挿入されません。 –

関連する問題