使用Hibernate注释操作连接表行排序

时间:2010-07-06 05:33:02

标签: hibernate join

我用hbm文件做了类似的事情,但到目前为止我还没有找到使用注释的等效文件。我希望能够做的是在连接表中创建一个关联,其中连接表包含关联的订单列(抱歉这里有任何不正确的术语)。在最简单的情况下,表格可能如下所示:

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 个答案:

答案 0 :(得分:1)

  

但是,我希望能够以编程方式在单元测试或管理工具中对Menus_Items表中的项目进行排序。所以,我想,我还需要一个MenuItems类,对吗?

如果这是真正的多对多,那么你拥有的是正确的。但是您不需要连接表的实体(稍后会详细介绍)。

  

我的问题是,为了实现这一目标,需要在相应的类上进行哪些注释?这些类可能看起来像这样(这是我所拥有的)

正如我所说,您不需要此MenuItem实体作为联接表,我希望在ManyToManyMenu之间看到Item(参考文档中的2.2.5.3.4. Indexed collections (List, Map)部分。)

  

@IndexColumn是否正确?以编程方式,如何指定MenuItems集合的顺序?

特定于Hibernate的@IndexColumn是正确的。但是,如果您使用的是JPA 2.0实现,则应该更喜欢标准的@OrderColumn注释(例如here)。

关于订单,您使用的是有序集合(List),订单源自List中元素的顺序(更准确地说,它们的索引将存储在数据库中)。因此,只需在Item中订购List<Item>

相关问题