我有以下数据库设置:

T_PARTICIPANT_MOVEMENT
ParticipantMove_SID     BigInt        PK
Participant_SID         BigInt        FK
MoveType_SID            BigInt        FK
MoveReason              Varchar(255)
is_Ops                  Bit
Order                   Integer

T_LEG
Leg_SID             BigInt      PK
StartRegion_SID     BigInt      FK
EndRegion_SID       BigInt      FK
PlannedStartDate    Datetime
PlannedEndDate      Datetime


TJ_PMOV_LEG
Leg_PMov_SID         BigInt    PK
Leg_SID              BigInt    FK
ParticipantMove_SID  BigInt    FK
Order                Integer

少量说明:参与者有多个ParticipantMovements,并且其中的移动顺序相同​​。

支腿来自运输部门,它们将执行不同的支腿,例如从布鲁塞尔飞往巴黎(支腿1)然后从巴黎飞往纽约的飞机
(第2条)和从纽约回到布鲁塞尔(第3条)。

我们可以让参与者进入每个起点,然后离开每个终点。
示例:参与者1飞行腿1(顺序1)和腿2(顺序2)。另一个将飞腿2(命令1)和腿3(命令2)。
除了使每个参与者的顺序正确之外,大多数逻辑是将顺序放入joinTable中。

我不必查看Java中的顺序,但是我需要坚持正确的顺序,并以正确的顺序检索列表。

这是唯一的解决方案,还是我也可以按正确的顺序列出列表(以及如何正确保留它)? :

参加者移动:
@OneToMany @JoinTable(name="TJ_PMOV_LEG")
@MapKeyColumn(name"order")
private Map<Integer,Leg> getLegs()

腿部
@OneToMany @JoinTable(name="TJ_PMOV_LEG")
@MapKeyColumn(name"order")
private Map<Integer,ParticipantMove> getMoves()

最佳答案

您可以使用@OrderColumn索引。它将保留在您的联接表中,该索引与ArrayList或任何其他列表中的索引相同。它将保留订单列表。

@OneToMany
@JoinTable(name="TJ_PMOV_LEG")
@OrderColumn(name="order_idx")
private List<Leg> getLegs()

您也可以使用@OrderBy批注在某些列上对集合进行排序。即
@OneToMany
@JoinTable(name="TJ_PMOV_LEG")
@OrderBy(value="lower(Order) asc") //"Order" is column name form T_PARTICIPANT_MOVEMENT table
private List<ParticipantMove> getMoves()

最后一个将order by子句追加到您的sql查询中。

希望能帮助到你。

09-10 08:53
查看更多