我用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集合的顺序?我可能做错了什么?我有一种唠叨的感觉,我错过了一些明显的东西。
任何帮助都非常感激。
答案 0 :(得分:1)
但是,我希望能够以编程方式在单元测试或管理工具中对Menus_Items表中的项目进行排序。所以,我想,我还需要一个MenuItems类,对吗?
如果这是真正的多对多,那么你拥有的是正确的。但是您不需要连接表的实体(稍后会详细介绍)。
我的问题是,为了实现这一目标,需要在相应的类上进行哪些注释?这些类可能看起来像这样(这是我所拥有的)
正如我所说,您不需要此MenuItem
实体作为联接表,我希望在ManyToMany
和Menu
之间看到Item
(参考文档中的2.2.5.3.4. Indexed collections (List, Map)部分。)
@IndexColumn是否正确?以编程方式,如何指定MenuItems集合的顺序?
特定于Hibernate的@IndexColumn
是正确的。但是,如果您使用的是JPA 2.0实现,则应该更喜欢标准的@OrderColumn
注释(例如here)。
关于订单,您使用的是有序集合(List
),订单源自List
中元素的顺序(更准确地说,它们的索引将存储在数据库中)。因此,只需在Item
中订购List<Item>
。