1

假设我有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添加它,它会正常工作吗?addSubCategory正确坚持吗?子类别会以正确的顺序自动保留吗?

4

1 回答 1

1

在您的代码的当前状态下 - 不。要使其按您的意愿工作,您需要执行以下操作:

  1. mappedBy用on连接双向关系的两边@OneToMany,否则 Hibernate 会认为你有两种不同的关系:

    @OneToMany(mappedBy = "Parent")
    
  2. 你有责任让你的关系双方保持一致:

    public void addSub(Category sub) {
        sub.setParent(this);
        subs.add(sub);  
    }  
    

    @ManyToOneHibernate 在存储外键时会查看侧边。

  3. 如果您希望持久的子类别Category自动持久化,则需要配置级联:

    @OneToMany(..., cascade = CascadeType.ALL)
    
于 2012-09-16T13:09:26.530 回答