如何将导航下拉菜单表示为 Java 对象(对于 JPA)

How to represent a navigation drop down menu as Java Object (for JPA)

是否有任何常规方法来处理必须将网站的下拉导航菜单作为 Java 对象以供 JPA 与数据库一起使用的问题。

我正在使用 MySQL 数据库,Hibernate 和 JPA 用于持久化。

实际的问题是在数据库中表示菜单的最方便的方式是什么。或者我需要为此目的避免对象。

'Drop down'表示菜单项可能有无限(或至少很少)的子项(子菜单)。

我从一个简单的数据库 table 开始,用于包含 ID、菜单项文本、url 和父 ID 的菜单项,但我不知道如何继续。

Menu和Submenu的关系很像Employee<->Manager关联,Employee向Manager汇报,Manager下可以有很多员工。这是双向@ManyToOne 和@OneToMany 关系。

参见下面的示例:

@Entity
public class Menu {

    private int id;
    private String text;
    private String url;

    @ManyToOne
    @JoinColumn(name="parent_menu_id")
    private Menu parent;

    @OneToMany(mappedBy="parent")
    private List<Menu> submenus;
}

在 ManyToOne 字段 - parent 上,它的列将默认命名为 "parent_id"。您可以使用 @JoinColumn 注释覆盖该列。

例如,这是您的菜单项及其子菜单:

  • 文件
    • 打开
    • 保存
  • 编辑
    • 剪切
    • 复制
    • 保存

示例数据库数据

[id:1, text:File, URL:/file.htm, parent_menu_id:null]
[id:2, text:Edit, URL:/edit.htm, parent_menu_id:null]
[id:3, text:New, URL:/new.htm, parent_menu_id:1]
[id:4, text:Open, URL:/open.htm, parent_menu_id:1]
[id:5, text:Save, URL:/save.htm, parent_menu_id:1]
[id:6, text:Cut, URL:/cut.htm, parent_menu_id:2]
[id:7, text:Copy, URL:/copy.htm, parent_menu_id:2]
[id:8, text:Paste, URL:/paste.htm, parent_menu_id:2]