我有以下数据库设置:
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()
Leg :
@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 注释在某些列上对集合进行排序。 IE。
@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 查询中。
希望能帮助到你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)