2010-07-06 50 views
2

我做過類似這樣與HBM文件,但到目前爲止,我還沒有找到一個等效使用註釋的東西。我希望能夠做的是在連接表中創建一個關聯表,其中連接表包含關聯的訂單列(對於此處的任何不正確的術語感到抱歉)。在非常簡單的,該表可能是這樣的:使用Hibernate註釋操作連接錶行排序

Table: Menus 
----- 
menu_id 

Table: Items 
----- 
item_id 

Table: Menus_Items 
---- 
menu_id 
item_id 
order_by 

如果我沒有要求的菜單項進行排序(這個ORDER_BY列),我可以沒有問題做到這一點;不過,我希望能夠以編程方式在單元測試或管理工具中的Menus_Items表中訂購商品。爲此,我想,我還需要一個MenuItems類,對嗎?是,需要

我的問題是什麼註解相應的類來實現這一目標? 的類可能是這個樣子(這是據我已經有了):

public class Menu { 
    private List<MenuItem> items; 

    // ... 

    @OneToMany 
    @JoinTable(name = "Menus_Items", 
     joinColumns = @JoinColumn(name = "menu_id"), 
     inverseJoinColumns = @JoinColumn(name = "item_id")) 
    @Cascade(value = { CascadeType.ALL, CascadeType.DELETE_ORPHAN }) 
    @IndexColumn(name = "order_by") 
    public List<MenuItem> getItems() { // ... 
    } 

} // end class Menu 

是@IndexColumn正確嗎?以編程方式,我如何指定MenuItems集合的順序?我可能會做錯什麼?我有一種嘮叨的感覺,我失去了一些明顯的東西。

任何幫助非常感謝。

回答

1

但是,我希望能夠以編程方式在單元測試或管理工具中的Menus_Items表中訂購項目。爲此,我想,我還需要一個MenuItems類,對嗎?

如果這是一個真正的多對多,那麼你有什麼是正確的。但是你不需要連接表的實體(稍後會有更多介紹)。

我的問題是,什麼樣的註釋需要在相應的類,使這種情況發生?這些類可能是這個樣子(這是據我已經有了)

正如我說的,你不需要這個MenuItem實體的連接表,我希望看到之間的ManyToManyMenuItem代替(在參考文檔中部分2.2.5.3.4. Indexed collections (List, Map))。

是@IndexColumn是否正確?以編程方式,我如何指定MenuItems集合的順序?

休眠特定@IndexColumn是正確的。但是,如果您使用的是JPA 2.0實現,則應該更喜歡標準@OrderColumn註釋(示例here)。

關於訂單,你正在使用的有序集合(List)和順序是從元素的List(更準確地說,他們的索引將被存儲在數據庫中)順序而獲得。所以只需按照List<Item>的順序訂購Item即可。

+0

這做到了。謝謝。但是,我堅持使用J2EE 5,而@OrderColumn僅在J2EE 6中可用。我在Mac上,我認爲我需要升級到Snow Tiger。 – richever 2010-07-08 13:52:13