[英]Hibernate loading children of a parent on user click?
这是我的休眠POJO类。
@Entity
@Table(name = "PARENT")
public class Parent {
@Id
private int id;
@Column(name = "NAME")
private String name;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent")
private List<Child> children;
// Getters and Setters...
}
@Entity
@Table(name = "CHILD")
public class Child {
@Id
private int id;
@Column(name = "NAME")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PARENT_ID", nullable = false)
private Parent parent;
// Getters and Setters...
}
从我对休眠的了解中,有两种方法。 (我仍然是菜鸟:P)
Session session = sessionFactory.openSession();
List<Child> children = null;
try {
children = session.createCriteria(Child.class, "C")
.add(Restrictions.eq("C.parent", parent)
.list();
} finally {
session.close();
}
要么
Session session = sessionFactory.openSession();
List<Child> children = null;
try {
session.refresh(parent);
children = parent.getChildren();
} finally {
session.close();
}
后来的一个使用刷新,是我在尝试Hibernate时偶然发现的。
Q.1最好的方法是什么?
Q.2当仅通过调用getter方法可以获取所有子级时,为什么使用Criteria API或HQL来获取懒惰的加载成员?
仅当父对象附加到会话时,才可以通过调用getter方法来加载子代。 您可以通过加载对象(在上面的代码中调用refresh
操作)或保存或更新将对象附加到会话。 请参阅文档以获取更多说明。 像下面的代码:
Session s = getSession();
Parent parent = s.get(parent, id);
List children = parent.getChildren();
基本上,这与使用条件API(使用的方式)相同。 Criteria和HQL用于许多其他事情。 就您而言,使用它们毫无意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.