【问题标题】:Hibernate loading children of a parent on user click?在用户点击时休眠加载父母的孩子?
【发布时间】:2013-10-26 08:25:36
【问题描述】:

这是我的休眠 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 为什么要使用 Criteria API 或 HQL 来获取延迟加载成员,而您只需调用 getter 方法即可获取所有子项?

【问题讨论】:

    标签: java hibernate hql hibernate-criteria


    【解决方案1】:

    只有当父对象附加到会话时,才能通过调用 getter 方法加载子对象。您可以通过加载对象(调用refresh 对上述代码所做的操作)或保存或更新将对象附加到会话;有关更多说明,请参阅文档。如下代码:

    Session s = getSession();
    Parent parent = s.get(parent, id);
    List children = parent.getChildren();
    

    并且这样做基本上与使用标准 API 相同(您使用的方式)。 Criteria 和 HQL 用于各种各样的其他事情。在您的情况下,使用它们毫无意义。

    【讨论】:

    • 另外,我有一个疑问!我是否出于错误的目的使用了 refresh() 方法,它是否用于不同的目的?那么,我可以将这种方法用于生产用途吗?
    • 查看this 以获取更新文档。你用对了。是的,这种方法绝对可以用于生产(除非您有长时间运行的会话,正如文档中提到的那样,在这种情况下您不应该使用刷新)。
    • 好的,我的会话在为父级及其子级创建摆动 GUI 时开始,并在完成 GUI 后关闭,然后将框架设置为可见。它会被称为长时间运行的会话吗?
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多