日期:2014-05-17  浏览次数:20705 次

hibernate多对多查询问题
背景描述:
    现有表a和b,两表之间存在多对多关系,该关系以表c形式存在,其主键由a主键aid及b主键bid组合生成。经hibernate映射后分别生成类A、类B及类AB。
    A中对B的引用表示为:private Set<B> b = new HashSet<B>(0);
    B中对A的引用表示为:private Set<A> a = new HashSet<A>(0);
    工程中需要通过客户端传来的对象A查询出它所对应的所有对象B,客户端用Flex进行开发。由于Flex传来的对象为ASObject类型,因此需要先从该对象中提取出属性id,再根据id找到对象A,最后得到A对应的所有B。程序段如下:

public List<B> search(ASObject arg){
    ADAO ad = new ADAO();
    Integer id = (Integer)arg.get("id");
    A a = ad.findById(id);
    Set<B> b = a.getB();
    ......
}

问题描述:
    对象A无法得到它所对应的对象B集合。经查,发现b为null,但是根据类定义,对象A中的B集合应以被初始化,即使某个对象A没有任何与之发生关系的对象B,也可得到b.isEmpty()为true的结果,而不应该是b为null。之后再次试验,先利用固定值得到对象A,如A a = ad.findById(10),再获取其对应的B集合则不会出现此问题。但不管哪种情况,对象A都能够正确获取,且A的其它属性也是正确的。
    不知何故,向各位请教,谢谢!

    

------解决方案--------------------
代码应该不止这些吧。。。我还是觉得你应该把相应的  配置信息都贴出来,,,,等大神帮你
------解决方案--------------------
你确定arg.get("id");对应的id有记录?
------解决方案--------------------
配置问题你要的是级联查询效果,设置一下cascade值