Hibernate是否允许加载/保存链接的实体?

时间:2012-09-16 12:45:54

标签: java hibernate one-to-many

假设我有自定义的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会被正确保留吗?子类别是否会以正确的顺序自动保留?

1 个答案:

答案 0 :(得分:1)

在您的代码的当前状态 - 没有。为了使它按你的需要工作,你需要做以下事项:

  1. mappedBy上与@OneToMany连接双向关系,否则Hibernate会认为您有两种不同的关系:

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

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

    Hibernate在存储外键时会查看@ManyToOne侧。

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

    @OneToMany(..., cascade = CascadeType.ALL)