对于herbernate对象关联的情况 在查询某个对象时会把关联的对象全部查上来,在数据量大的时候显然很消耗性能,
所有想只查询某个对象的某几个字段,不用创建Criteria或者在hql语句中指定查询的某几个字段类似的方法,这样显然在编写代码的时候会很麻烦(比如某个对象关联的对象比较多),有没有一种合理的配置来实现只查询某个对象的某几个字段,或者谈谈这种问题你们是如何来处理的,请教!!!

解决方案 »

  1.   

    把映射文件中你不想显示的字段的懒加载(lazy="false")设置成false就行了
      

  2.   

    关于最佳实践
    楼主可以下Hibernate的帮助文档 看中文的 意思也很清楚
    如果
    有一个班有10个学生 如果你只想看班的信息 那就 Lazy吧
    如果
    有10个学生 你想查学生信息的时候一并把班级的信息查上来 那就fetch
      

  3.   

    if (!Hibernate.isInitialized(rm)) {
    Hibernate.initialize(rm);
    }
    红色的是要加裁的对象。先判断内存中是否存在。
    这种方式可以在需要加裁是使用。不建议使用lazy,它对应所有,不需要加裁的也加裁了。性能不高
      

  4.   

    补充:在session未close前写入。
      

  5.   

    如果只查一个表中的某几个字段,并且查出来还要封装成想的对象的话,貌似hibernate3中是可以为要查询的这个几个字段在 Model中写上相应的构造函数,然后在hql中可以调用一个方法的。具体的不太记得了,可以看下hibernate的API。
      

  6.   

    就用hql选择要显示的字段,也不是特别麻烦吧
      

  7.   


    List list = session.createQuery("select new TUser(user.name, user.age) from TUser as user").list();
    TUser user;
    for (int i=0; i < list.size(); i++) {
        user = (TUser)list.get(i);        
        System.out.println(user.getName()  +  ", " + user.getAge());
    }
    但此时,实体类TUser必须包含如下构造函数:
    public TUser(String name, Integer age)
    {
        this.name = name;
        this.age = age;    
    }