0

在我们的应用程序中,我们有三个表dps_useraccount和 ,profile用于构建用户配置文件。该profile表具有account_id作为外键。基于这样的设计,userprofile.xml编写。account_id被映射为item-typein xml,这对于一对一的映射工作正常。每个帐户都将有一个单独的个人资料。

现在我们有一个场景一对多映射(一个配置文件关联到多个帐户)。我们profile_account为此有一个新表,其映射如下。

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

默认情况下,Account: 001 将映射到 Profile: 001。登录后我们将获得new_id. 使用此值,我们将获取帐户,而用户将是 UI 中的帐户之一。

如果用户选择 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