ManyToMany在Play Framework上的同一个实体

时间:2014-10-28 10:32:54

标签: java hibernate playframework-2.0 entity-relationship hibernate-annotations

我已经用了两天的时间搜索了很多内容,我找不到像我目前面临的关于休眠符号的那个问题。 我想基于项目表示树层次结构。每个项目可能包含零个或多个父项目,并且可能包含零个或多个子项目。

我当前的项目类定义如下:

@Entity
public class Items extends Model {
    @Id
    public Integer id;

    @...
    public List<Items> parents;

    public String name;
}

当然,我希望在做以下事情时建立层次结构:

item1.parents.add (item2);
item2.parents.add (item3);

我假设某种桥接表(用于项目和父项关系)将自动构建在SQL数据库中。

我想在Items类中没有添加子字段的情况下有一个解决方案。

在上面的例子中,我应该在@中添加什么?

THX

1 个答案:

答案 0 :(得分:1)

应该做的伎俩

@ManyToMany
@JoinTable(name = "items_parents", joinColumns = @JoinColumn(name = "items_id"), inverseJoinColumns = @JoinColumn(name = "parent_id"))
public List<Items> parents = new ArrayList<>();

@ManyToMany(mappedBy = "parents")
public List<Items> children = new ArrayList<>();

它创建了连接表,如:

create table items_parents (
    items_id              integer not null,
    parent_id             integer not null,
    constraint pk_items_parents primary key (items_id, parent_id)
);

Notabene模型应使用单数形式作为名称,即Item而非Items

编辑:

要保存ManyToMany关系,您当然需要保存要添加的项目,否则它不会有id,示例:

Items parent = new Items();
parent.save(); // <- here

Items child = new Items();
child.parents.add(parent);
child.save();