hibernate怎么实现right join的效果hibernateright joinjava

解决方案 »

  1.   

    配置文件已经配置了fetch=join,可以使用left join,但是使用right join会报错,错误:java.lang.UnsupportedOperationException: join type not supported by OracleJoinFragment (use Oracle9Dialect)
      

  2.   

    回复于: 2013-03-06 14:04:09 
    fetch=join 
      

  3.   

    方言改成Oracle9Dialect之后可以实现了,但是报这个错:java.lang.NumberFormatException: For input string: "userid"
      

  4.   

    方言改成Oracle9Dialect之后可以实现了,但是报这个错:java.lang.NumberFormatException: For input string: "userid"
      

  5.   


    错误信息已经很明显了 userid 的数据类型定义错了。 看一下DB定义。是 number 还是 string
      

  6.   

    数据库定义的是NUMBER类型,hbm文件配置的是Long,实体也是Long
      

  7.   

    inner join(内连接)
    left outer join(左外连接)
    right outer join(右外连接)full join (全连接,并不常用)
    HQL中的条件用with即:left join ... with...
    SQL中的条件用on即:left join ... on...
    语句inner join, left outer join 以及 right outer join
    可以简写。
    from Cat 
    as 
    cat    
    join cat.mate 
    as 
    mate    left
    join cat.kittens 
    as 
    kitten 
    通过HQL的with关键字,你可以提供额外的join条件。
    from Cat 
    as 
    cat    
    left join cat.kittens 
    as 
    kitten        
    with kitten.bodyWeight > 10.0还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接
    与延迟声明(lazy declarations).
     from
    Cat 
    as 
    cat    
    inner join fetch
    cat.mate    left
    join fetch cat.kittens 
    一个fetch连接通常不需要被指定别名, 因为相关联的对象不应当被用在 where 子句 (或其它任何子句)中。同时,相关联的对象
    并不在查询的结果中直接返回,但可以通过他们的父对象来访问到他们。 from
    Cat 
    as 
    cat    
    inner join fetch
    cat.mate    left
    join fetch cat.kittens
    child    left
    join fetch child.kittens假若使用iterate()来调用查询,请注意fetch构造是不能使用的(scroll()
    可以使用)。fetch也不应该与setMaxResults()
    或setFirstResult()共用,这是因为这些操作是基于结果集的,而在预先抓取集合类时可能包含重复的数据,也就是说无法预先知道精确的行数。fetch还不能与独立的
    with条件一起使用。通过在一次查询中fetch多个集合,可以制造出笛卡尔积,因此请多加注意。对bag映射来说,同时join
    fetch多个集合角色可能在某些情况下给出并非预期的结果,也请小心。最后注意,使用full join fetch 与 right
    join fetch是没有意义的。如果你使用属性级别的延迟获取(lazy fetching)(这是通过重新编写字节码实现的),可以使用 fetch all
    properties 来强制Hibernate立即取得那些原本需要延迟加载的属性(在第一个查询中)。
    from Document fetch all properties order by name
    from Document doc fetch all properties where lower(doc.name)
    like 
    ''%cats%''
      

  8.   

    使用right join 后返回的结果变成了object,该怎么遍历取值
      

  9.   

    object转换
    List<Object[]> temp = (List<Object[]>) query.list();
    List<类> list = new ArrayList<类>();
    WorkList workList = null;
    for (Object[] obj : temp) {
    对象= new 类();
    if (obj[1] != null) {
    对象.setObjname(obj[1]);
    }
    ......
    }。
      

  10.   

    List<Object[]> temp = (List<Object[]>) query.list();
                List<类> list = new ArrayList<类>();
                类 对象= null;
                for (Object[] obj : temp) {
                    对象= new 类();
                    if (obj[1] != null) {
                        对象.setObjname(obj[1]);
                    }
    ......
    }