【问题标题】:Embedded Classes/DB structure嵌入式类/数据库结构
【发布时间】:2012-10-11 18:20:30
【问题描述】:

我正在尝试将我的多层菜单存储在数据库中。我有一个类HorizontalMenu,其中包含一个List<MenuItem> 用于其项目。我的MenuItem 类包含一个String 用于文本,一个String 用于URL,另一个HorizontalMenu 用于子菜单(如果有的话)。

所以我的主菜单可以有任意数量的MenuItems,每个可以有零个或一个HorizontalMenus。

所以我想知道如何在代码中准确设置它,以便在数据库中正确设置。

我正在使用 Ebeans 和 Play Framework 2.0,因此这些术语的答案会很好,但如果有人能用 DB 术语指出我正确的方向,那也很好。



这是我目前得到的:

Horizo​​ntalMenu.java:

@Entity
@Embeddable
public class HorizontalMenu extends Model{

    @Id
    @GeneratedValue
    public Long id;

    public List<MenuItem> items;

    public Long getId()
    {
        return this.id;
    }
    public void setId(Long id)
    {
        this.id = id;
    }

    public List<MenuItem> getItems()
    {
        return this.items;
    }
    public void setItems(List<MenuItem> items)
    {
        this.items = items;
    }

    public static Finder find = new Finder(Long.class, HorizontalMenu.class);
}

MenuItem.java:

@Entity
@Embeddable
public class MenuItem {
    @Id
    public Long id;
    public String text;
    public String url;
    public HorizontalMenu subMenu;
}

【问题讨论】:

    标签: java playframework playframework-2.0 ebean


    【解决方案1】:

    因为你的MenuItem 类是@EmbeddableHorizontalMenu 类中的数据成员项将是 @Embedded。所以,它应该是这样的:

    @Embedded
    public List<MenuItem> items;
    

    由于您的MenuItem 被标记为@Embeddable,因此您不必将其标记为@EntityObject 要成为 Entity 有某些要求,例如Id。而Embeddable 对象没有唯一标识。所以,不要打扰。

    为了快速测试这一点,请创建一个内存数据库。现在,当您启动您的应用程序时 - 数据库将即时创建。因此,您将能够看到表格的布局方式。执行的脚本在 conf 目录下。

    为了进一步测试 - 在应用程序启动期间通过 YAML 插入一些数据(提示 - 查看 GlobalSettings 对象,Play Docs 中提供的示例)并查看它是否正确插入。

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多