我是hibernate的新手。任何人都可以帮助我跟进
我的应用程序使用spring和hibernate。在hbm.xml文件中,我使用lazy = true和fetch = join。
我有10000个父对象,我使用for循环进行迭代。在for循环中,我通过parent.toString()调用子对象; toString被覆盖。
调用子对象的过程花费了大量时间,因为它从子对象执行许多选择查询。有什么方法可以优化这个。
答案 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)
希望这会帮助你...