0

このアプリケーションには、ユーザー プロファイルを作成するためのdps_useraccount、および3 つのテーブルがあります。テーブルは外部キーとして持ってprofileいます。このデザインに基づいて、書かれています。1対1のマッピングで正常に機能するin xmlとしてマッピングされます。すべてのアカウントには個別のプロファイルがあります。profileaccount_iduserprofile.xmlaccount_iditem-type

これで、1 対多のマッピング (複数のアカウントに関連付けられた 1 つのプロファイル) のシナリオができました。profile_accountこれには、以下のマッピングを持つ新しいテーブルがあります。

NEW_ID   ACC_NO   PROFILE_ID
======   ======   ==========
001      001      001
001      002      001
002      001      002
002      002      002

デフォルトでは、アカウント: 001 はプロファイル: 001 にマップされます。ログイン後、new_id. この値を使用して、アカウントをフェッチし、ユーザーは UI のアカウントの 1 つになります。

ユーザーが Account: 002 with を選択した場合new_id、プロファイルをACC_ID: 002 で更新する必要があります。これを実現するには、最初にアカウント アイテムを取得してから、対応するプロファイル アイテムを更新します。

これを行うと、頻繁に例外が発生し、更新が失敗します。

Error : java.sql.SQLException: java.sql.SQLSyntaxErrorException: ORA-02049: timeout: distributed transaction waiting for lock

テーブルで更新が成功する場合がありますが、この更新中にprofile古いアカウントがテーブルから削除されます。accountプロファイル テーブルの account_id の挿入、更新、削除としてカスケードがあります。

userProfile.xml:
<item-descriptor name="user" item-cache-size="3000" item-cache-timeout="900000" query-cache-size="1000" query-expire-timeout="900000">
    <table name="PROFILE" type="auxiliary" id-column-name="user_id">
        <property name="account" display-name="Account" column-name="ACCOUNT_ID" item-type="account" cascade="insert,update,delete" />
    </table>
</item-descriptor>
<item-descriptor name="account">
    <table name="ACCOUNT" type="primary" id-column-names="ID">
    <property name="accountNo" data-type="string" column-name="ACC_NO" />
    </table>
</item-descriptor>
4

0 に答える 0