hibernate延迟初始化问题

时间:2015-10-10 18:06:28

标签: hibernate

我是hibernate的新手。任何人都可以帮助我跟进

我的应用程序使用spring和hibernate。在hbm.xml文件中,我使用lazy = true和fetch = join。

我有10000个父对象,我使用for循环进行迭代。在for循环中,我通过parent.toString()调用子对象; toString被覆盖。

调用子对象的过程花费了大量时间,因为它从子对象执行许多选择查询。有什么方法可以优化这个。

1 个答案:

答案 0 :(得分:0)

永远不要在循环中激活查询相反,您可以按照以下步骤获取所有父项的所有子项。

在Hibernate DAO中创建一个方法并在函数中传递join属性,或者你可以发送joinproperties数组,例如:

 public findAllRecord(Class persistentClass, String joinproperty)   // For array (String[] joinproperty)
    {
        Criteria criteria = session.createCriteria(persistentClass);        criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
        criteria.setFetchMode(joinproperty, FetchMode.JOIN);
        return criteria.list();
    }

您可以在上面的标准中添加限制,例如:

//在此处添加条件限制,您也可以在上述函数中传递属性,例如:

criteria.add(Restrictions.eq(propertyName, name));

以上名称和propertyName可以动态传递函数。

现在通过传递join属性来调用上面的方法; 例如:

class Parent{

  private int id;
  private String name;
  private Child child;

}

class Child{

   // Child property
}

方法调用将是....喜欢。

String joinproperty="child";  // Property of Parent class which you want to join
findAllRecord(Parent.class, String joinproperty) 

希望这会帮助你...