我已经用了两天的时间搜索了很多内容,我找不到像我目前面临的关于休眠符号的那个问题。 我想基于项目表示树层次结构。每个项目可能包含零个或多个父项目,并且可能包含零个或多个子项目。
我当前的项目类定义如下:
@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
答案 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();