假设我有自定义的Category
实体,定义如下:
public class Category {
@Id
@Access(AccessType.FIELD)
public String Url;
@ManyToOne(optional=true)
@Access(AccessType.FIELD)
public Category Parent;
@OneToMany
private Set<Category> subs;
public void addSub(Category sub) {
subs.add(sub);
}
public void removeSub(Category sub) {
subs.remove(sub);
}
@Access(AccessType.FIELD)
public String Title;
@Access(AccessType.FIELD)
public boolean Done;
我想知道,如果我创建新的Category
并使用我的addSub
方法添加它,它会正常工作吗? Category
会被正确保留吗?子类别是否会以正确的顺序自动保留?
答案 0 :(得分:1)
在您的代码的当前状态 - 没有。为了使它按你的需要工作,你需要做以下事项:
在mappedBy
上与@OneToMany
连接双向关系,否则Hibernate会认为您有两种不同的关系:
@OneToMany(mappedBy = "Parent")
您有责任保持双方关系的一致状态:
public void addSub(Category sub) {
sub.setParent(this);
subs.add(sub);
}
Hibernate在存储外键时会查看@ManyToOne
侧。
如果您希望自动保留持久性Category
的子类别,则需要配置级联:
@OneToMany(..., cascade = CascadeType.ALL)