我在使用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会返回一个缓存的持久对象吗?
答案 0 :(得分:0)
调用saveOrUpdate()
方法后,请务必在获取标识符后调用evict()
。
void org.hibernate.Session.evict(Object object)
从会话缓存中删除此实例。对实例的更改 不会与数据库同步。此操作级联到 关联映射的关联实例 级联= “逐出”。