2012-09-16 39 views
1

假设我有自我链接这个Category实体定义如下:Hibernate是否允许加载/保存链接的实体?

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

在您的代码的当前状态 - 没有。为了使你想要的,你需要做的followng它的工作:

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

    @OneToMany(mappedBy = "Parent") 
    
  2. 这是你的责任,保持双方的关系处于一致的状态:

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

    Hibernate look当它存储外键时在@ManyToOne侧。

  3. 如果你想持续Category子类别进行自动持久,你需要配置级联:

    @OneToMany(..., cascade = CascadeType.ALL) 
    
相关问题