自从两天以来,我在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/