从数据库动态创建菜单的最佳方法

时间:2015-12-28 17:06:43

标签: java sql hibernate

我尝试动态地从数据库创建一个菜单。

假设我有桌子:

"menu": 
               [
                  {"name": "Menu1", "url": "www.google.com", "childMenu": null},
                  {"name": "Menu2", "url": "1", "childMenu": 
                     [
                        {"name": "childMenu1","url": "www.google.com", "childMenu": null},
                        {"name": "childMenu2","url": "www.google.com", "childMenu": null},
                        {"name": "childMenu3","url": "www.google.com", "childMenu": null}
                     ]
                  },
                  {"name": "Menu3", "url": "www.google.com", "childMenu": 
                     [
                        {"name": "childMenu1","url": "www.google.com", "childMenu": null},
                        {"name": "childMenu2","url": "www.google.com", "childMenu": null}
                     ]
                   }   
               ]

和数据

Data example

现在我想在类

中使用hibernate映射信息
sudo apt-get -y install redis-server

所以我可以从该类创建一个类似于

的JSON
{{1}}

关于如何用hibernate做的任何想法,所以我不必使用嵌套的?

谢谢。

2 个答案:

答案 0 :(得分:0)

大致是:

@Entity
@Table(name = "MENU")
public class Menu {
    @Id
    @Column(name = "ID")
    private int id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "URL")
    private String url;

    @OneToMany
    @JoinColumn(name = "FATHER", referencedColumnName = "ID")
    private List<Menu> childMenu;
}

您不应该在此处要求任何特殊@Json*注释,因为您没有在此处映射FATHER关系的两端。如果是,您还需要在@JsonIgnore字段中添加father

答案 1 :(得分:0)

更改表格,使其有一个额外的列:

my_list.split(',')

MENU ( MASTER_ID, ID, NAME, URL, FATHER ); 包含主菜单项ID:示例:

MASTER_ID

是主菜单项。

子项:

MASTER_ID | ID | NAME      | URL      | FATHER
NULL      | 1  | some_menu | some_url | NULL

小孩:

MASTER_ID | ID | NAME       | URL       | FATHER
1         | 2  | some_menu2 | some_url2 | 1

正如您所注意到的:MASTER_ID | ID | NAME | URL | FATHER 1 | 3 | some_menu2 | some_url2 | 2 可用于仅在1个查询中检索完整的菜单树,而无需将表连接回自身。