自从两天以来,我在Google上搜索了很多东西,但找不到像我目前面临的关于休眠表示法的问题一样的问题。
我想代表一个基于项目的树层次结构。每个项目可能有零个或多个父项,并且可能有零个或多个子项。

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

@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类中添加子字段。

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

谢谢

最佳答案

这应该够了吧

@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();

关于java - Play框架中的ManyToMany在同一实体上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26606051/

10-09 04:57