如果已经建了多对一的关系然后还自己写查询是不是有点多余啊,没跟踪过hibernate的后台查询,所以不知道他的做法,但我认为不应该那么弱智吧,如果数据量大,岂不要慢死,不过数据量大的话也不会同时显示出来。

解决方案 »

  1.   

    不是自己写hsql,而是依靠已经建立好的关系,让hibernate自己运行。但是hibernate运行的时候,就出现1+N次的查询。例如查询user列表(1次),要一并显示该用户所属的组别,就需要查多N次Group表。
      

  2.   

    select * from user u left join fetch u.group
      

  3.   

    不需要写hsql可以吗?让hibernate自动根据配置文件运行。
      

  4.   

    也在研究这个问题,看看这个文章挺有帮助的
    http://book.csdn.net/bookfiles/190/1001908829.shtml
      

  5.   

    <many-to-one name="group" column="groupid" class="com.bean.Group"/>
    加个东西<many-to-one name="group" column="groupid" class="com.bean.Group" fetch="select"/>
      

  6.   

    在 mapping 中改配置好处是代码编写简单,缺点是失去了 lazy load 的好处,不管你用不用 group 都给你 load 进来。
    在 hql 中改,好处是可以区分那些地方需要 fetch, 哪些地方不需要 fetch.缺点是需要人工去改。
      

  7.   

    要看情况.
    假如group 只有 十几个,user再怎么大,假设有10万 抓取group也只有那么十几次, 因为有缓存, 这样性能更高. 如果你使用join , group也就变成10万个, 多占了内存和网络带宽.
      

  8.   

    而且象group这种表可以做二级缓存, 在多用户并发的情况下, group被抓取的次数比例更低.
    如果采用join 则每个用户都抓10W次
      

  9.   

    "from user" 得到user对象的List
    通过List得到user对象
    然后user.getGroup().id
    这样不就得到用户的组ID了么
    如果你没有设置延迟加载的话,直接这样写
      

  10.   

    fetch="join"
    预先抓取
    或者
    lazy="false|true"
    batch-size="3"或者取大一点
    做批量加载