是否有任何传统的方法来处理必须为网站提供下拉导航菜单作为 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/