2

Hibernate ベースの (33.) Web アプリケーションがあり、一意のインデックスによって制限されたデータ値ペアのスワップに関連する問題が見つかりました。フライトチケットHBMには

<many-to-one name="participants" class="net.umbrella.entity.ParticipantModel" fetch="select">
    <column name="PARTICIPANTID" not-null="false" />
</many-to-one>
<many-to-one name="flights" class="net.umbrella.entity.FlightModel" fetch="select">
    <column name="FLIGHTID" not-null="true" />
</many-to-one>

参加者 P1 に割り当てられたチケット A と参加者 P2 に割り当てられたチケット B のデータ ペアを取り、2 人の参加者を交換することが機能的に可能です。チケット A は参加者 P2 に割り当てられ、チケット B は参加者 P1 に割り当てられます。ただし、FLIGHTID + PARTICIPANTID には一意の制約があります。

Hibernate がチケット A で参加者 P1 を P2 に変更する最初の更新を発行すると、GenericJDBCException がスローされます。

Attempt to insert duplicate key row in object 'FLIGHTTICKET' with unique index 'IDX_FLIGHTTICKET_UQ'

誰もこれに対する一般的な解決策を持っていますか?

ありがとうサイモン

4

1 に答える 1

4

したがって、次のようなものがあります。

Participant temp = pair1.getParticipant();
pair1.setParticipant(pair2.getParticipant());
pair2.setParticipant(temp);

代わりに、次のようにします。

Participant temp1 = pair1.getParticipant();
Participant temp2 = pair2.getParticipant();
pair2.setParticipant(null);
session.flush();
pair1.setParticipant(temp2);
pair2.setParticipant(temp1);

中間フラッシュは、一度に 1 つのペアのみが参加者を参照するようにします。

于 2012-12-01T16:41:19.437 に答える