我有两个表 A 和 B, A 和 B 中都有一个 CardNum 非主键字段, 我想在查询 A 表时通过 CardNum 把B表中对应的记录读出来(CardNum 在B表中是唯一的),但有可能 A 表中的 CardNum 在 B 表中不存在,所以没有外键约束,用 SQL 来实现就是 SELECT a.*, b.* where a.CardNum=b.CardNum. 不知道使用 Nhibernate如何关联这两个表,我期望的效果是可以 A.B 这样就能访问到 A.cardnum 对应的 B 记录。 

解决方案 »

  1.   

    A和B之间通过CardNum关联,他们是多对多的关系吗?
      

  2.   

    多对一关系, cardnum 在 b 表中是唯一的,
    但有可能 a 表中的 cardnum 是 b 表中没有的非法值。
      

  3.   

    select a.*, b.* from a left join b on a.CardNum=b.CardNum
    这样sql才对吧,直接调用sql不就行了
      

  4.   

      from A a,B b where a.CardNum=b.CardNum;
      

  5.   

    接5楼,返回结果是个List<Object []>
    列表里的节点Object[0]就是你的A,Object[1]就是你的B,强制转化就oK了
      

  6.   

    一个one to many嘛。。在B表里面放一个List<A> ,A里面放一个B的对象,然后在配置文件里面配置他们的关系就可以了。
      

  7.   

    SQL语句是对的,你直接把这个语句写成
    String hql="SELECT a.*, b.* where a.CardNum=b.CardNum. ";
    List<Object[]> list=this.getSession.createQuery(hql).list();
    这样你查询出来的东西就存为了list。
    节点Object[0]就是你的A表的东西,Object[1]就是你的B表的东西,转换成你映射的类就可以了。
      

  8.   

    。写了几年sql,从没见过这样sql,对在哪里??????
      

  9.   

    lz的问题不是很懂捏  如果把2个表之间设置了关联 那么只要查询一个表那么另外的一个表中的所有数据难道还没查出来么?!? hql语句那不随便写啊.......
      

  10.   

    sql查属性,hql查对象,貌似用连接查询ID都相等了怎么还可能没有cardnum,什么个情况!!