有两个表,主表 A,副表 B,表间关系为一对一(id 关联)
对A来说对应的B允许为空Query q = session.createQuery("from A left join A.b where A.age>10");
return q.list();执行时,生成一个联合查询,但对于 A 中对应 B 为空的每一个记录,会自动对 B 进行一次查询【对于 A 中对应 B 为空的每一个记录,会自动对 B 进行一次查询】??是什么原因

解决方案 »

  1.   

    fetch=FetchType.EAGER的原因..你可以把它设成lazy试试...应该没问题的
      

  2.   

    我补充下,由于你是一关联,在onetoone中属性默认为fetch=FetchType.EAGER,你可以将它设成lazy,问题应该可以解决!!!
    改了后..这样就当你用到这些数据时,它才会自动对 B 进行一次查询,如果是fetch=FetchType.EAGER,就默认查询
      

  3.   

    我使用的就是 lazy,关联代码如下
    表A的
    @OneToOne(fetch=FetchType.LAZY, mappedBy="a")表B的
    @OneToOne(fetch=FetchType.LAZY)@PrimaryKeyJoinColumn
      

  4.   

    将查询修改成
    Query q = session.createQuery("from A where A.age>10");
    return q.list();也出现同样的问题
      

  5.   

    如果你用left join了,设置lazy是不是应该就没有用了啊
      

  6.   

    目前问题可能就是设置成“一对一外键双向关联”所引起的,但应该如何修改成非双向关联呢?表A的
    @OneToOne(fetch=FetchType.LAZY, mappedBy="a")
    表B的
    @OneToOne(fetch=FetchType.LAZY)@PrimaryKeyJoinColumn
      

  7.   

    @OneToOne(targetEntity = AVO.class, fetch = FetchType.LAZY)
        @JoinColumn(name = "A_ID")
        private AVO aVO;