2014-09-26 48 views
3

冬眠多對多用命令我有以下的DB設置:在jointable

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中看到訂單,但我需要保持它的正確性,並以正確的順序檢索列表。

這是唯一的解決方案還是我可以有一個正確的順序列表(以及我如何堅持正確)? :

ParticipantMove:

@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() 
+0

我認爲插入順序與Java中的集合順序相同,但我不確定這一點。 – Antoniossss 2014-09-26 08:52:30

回答

4

可以使用@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查詢。

希望它有幫助。

+0

我會在星期一進行測試,但也在考慮這個方向。如果正確,接受和投票將在星期一進行。 – chillworld 2014-09-26 16:46:12