我们有一个基于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'
有没有人对此有共同的解决方案?
由于 西蒙
答案 0 :(得分:3)
所以,你有这样的事情:
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);
中间同花将确保一次只有一对参考参与者。