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

标签 mysql object jpa menu navigation

是否有任何传统的方法来处理必须为网站提供下拉导航菜单作为 JPA 与 DB 一起使用的 Java 对象的问题。

我正在使用 MySQL DB、Hibernate 和 JPA 来实现持久化。

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

“下拉”意味着菜单项可能有无限(或至少很少)的子项(子菜单)。

我从一个简单的菜单项数据库表开始,该表由 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]

关于mysql - 如何将导航下拉菜单表示为 Java 对象(对于 JPA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33021446/

相关文章:

mysql - 如何使用 go-sql-driver 连接到 Amazon RDS

mysql - 交叉连接比内连接快得多

php - 我怎样才能得到mysql中一列的总数?

java - 在对象内部使用对象的构造函数

php - 获取排除少数用户的特定用户列表

Java - 从对象属性获取方法

javascript - 无法访问 props 对象内部的值

java - @ManyToOne 关系在 Spring Data REST 中插入空对象

java - 在 hibernate 中使用复合键

postgresql - 如何在 JPA 中使用 Postgres 序列?