2

我在使用 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()立即检索该类别对象。
所以我想如果我立即检索到它被持久化的对象,休眠返回一个缓存的持久性对象?

4

1 回答 1

0

调用saveOrUpdate()方法后,确保evict()在获取标识符后调用。

void org.hibernate.Session.evict(Object object)
从会话缓存中删除此实例。对实例的更改不会与数据库同步。如果关联映射为 cascade="evict",则此操作级联到关联实例。

于 2013-06-11T02:34:41.920 回答