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 的数据对并交换两个参与者。票 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);

中间刷新将确保一次只有一对引用参与者。

于 2012-12-01T16:41:19.437 回答