Hibernate双向多对一映射,无法从子进程获取父对象

时间:2013-06-09 08:50:22

标签: java hibernate

我在使用Hibernate 4时遇到了一些问题。我有一个双向映射POJO也是双向的。我可以从父类别中获取子类别列表,但我无法从其子类中获取父类别。 这是我的代码:

@Entity
public class Category {

private Long id;
private String cateName;
private String cateType;
private String description;
private List<Category> childCategories;
private Category category;

public Category() {
    childCategories = new ArrayList<Category>();
}

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

@ManyToOne
@JoinColumn(name="parent_id", referencedColumnName="id")
public Category getCategory() {
    return category;
}

public void setCategory(Category category) {
    this.category = category;
}

public String getCateName() {
    return cateName;
}
public void setCateName(String cateName) {
    this.cateName = cateName;
}
public String getCateType() {
    return cateType;
}
public void setCateType(String cateType) {
    this.cateType = cateType;
}
public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

@OneToMany(mappedBy = "category")
public List<Category> getChildCategories() {
    return childCategories;
}

public void setChildCategories(List<Category> childCategories) {
    this.childCategories = childCategories;
}

@Override
public String toString() {
    return "Category [id=" + id + ", cateName=" + cateName + ", cateType="
            + cateType + ", description=" + description + "]" + "Parent: " + category;
}

}

这是一个普通的嵌套类别映射。我可以使用category.getChildCategories()来正常获取子列表,但如果我使用category.getCategory(),则返回父对象仅包含id,其他为null,如下所示:[id=7, cateName='Java', cateType='2', description='java category', category=[id='2', cateName=null, cateType=null, description=null, category= null]]。如何获取所有父对象直到root?真的需要你的帮助,谢谢! 额外: 以这种方式检索category
1.创建瞬态对象category
2.使用saveOrUpdate()方法保留它。
3.使用getIdentifier()返回添加类别的ID 4.使用get()立即检索此类别对象 所以我想如果我立即检索对象,那么hibernate会返回一个缓存的持久对象吗?

1 个答案:

答案 0 :(得分:0)

调用saveOrUpdate()方法后,请务必在获取标识符后调用evict()

  

void org.hibernate.Session.evict(Object object)
  从会话缓存中删除此实例。对实例的更改   不会与数据库同步。此操作级联到   关联映射的关联实例   级联= “逐出”。