我有以下数据库设置:
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查询中。
希望能帮助到你。