2016-04-28 48 views
1

我想在我的实体中有一个cascade delete。但我认为这是因为我的子女entity中有一列引用了。Hibernate:将父对象映射到子对象中的一个列的2个引用?

在我的孩子犬实体我本来以下领域:

@Column(name = "KENNEL_ID", insertable = false, updatable = false) 
    private String kennelId;  

我加入这个,因为我希望得到有关父母的所有子实体的列表:

@ManyToOne 
    @JoinColumn(name = "KENNEL_ID") 
    private Kennel kennel; 

在我的父母犬舍实体中,我还添加了这个字段,指的是我添加的孩子中的字段:

@OneToMany(mappedBy = "kennel",cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) 
    private List<Dog> dogList= new ArrayList<Dog>(); 

在添加第二个子引用和父引用之前,级联删除对所有实体都起作用。但是,因为我已经添加了它们,所以没有。

我该如何解决这个问题?

回答

3

这不是将父母和孩子映射到同一个班级的问题。问题是您需要手工维护双向关系的两端。

child.setParent(parent) 
parent.addChild(child) 

BTW:只在一侧(一个负责存储在数据库中的关系),店内设置,并重新装入实体将在某些情况下工作了。 (在许多老教程中你会发现这个肮脏的伎俩)。但在我看来这是不好的做法。 (在您的测试案例中,在孩子保存后重新加载父代之前需要清理缓存。)

public void setDogList(List<Dog> dogList) { 
     this.dogList.clear(); 
     this.dogList.addAll(dogList); 
    } 
相关问题