还有一个问题!!String hsql="select a.ab001,a.ab002,a.ab006,b.aa002 as ab003 from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on  a.ab003=b.aa001 where a.ab004='0'";所查询出的a.ab001是个集合 如果等于"00"执行sql1 不是执行sql2这是我的程序:dao中 public List findbm(){
     try{
     String hsql="select a.ab001,a.ab002,a.ab006,b.aa002 as ab003 from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on  a.ab003=b.aa001 where a.ab004='0'";
     return getHibernateTemplate().find(hsql);
     }catch(Exception e){
     return null;
     }
    }
------------------------------------------------------------------------
service.java
public List bmlist() {
// TODO Auto-generated method stub

List list=dao.findbm();
return null;
}
----------------------------------------------------------
我应该在那里写这个?

解决方案 »

  1.   

    <class name="Summary">
        <subselect>
            select a.id ,a.name , a.adress
            from a
            join b on a.name = b.name
        </subselect>
        <synchronize table="a"/>
        <synchronize table="b"/>
        <id name="name"/>
        ...
    </class>
    我现学现卖啊 你看管用不 请高手指正
      

  2.   

    http://www.redsaga.com/hibernate-ref/3.x/zh-cn/html/mapping.html不会学啊 我也在学习ing
      

  3.   


    StringBuilder hql = new StringBuilder();
    hql.append("SELECT ")
    .append(  "a.id, ")
    .append(  "a.name, ")
    .append(  "a.age, ")
    .append(  "ab.adress ")
    .append("FROM ")
    .append(  "A a ")
    .append(  "left outer join a.b ab, ")
    .append("WHERE ...") Session session = this.getSession();
    Query query = session.createQuery(hql.toString()); List<Object[]> tempList = query.list(); if (tempList != null && tempList.size() > 0)
    {
    YourVo yourVo = null;
    Object[] date = null;
    for (int i=0; i<tempList.size(); i++)
    {
    yourVo = new YourVo();
    date = tempList.get(i);
    if (date != null && date.length > 0)
    {
    repairPlanVO.setId(String.valueOf(date[0]));
    repairPlanVO.setName(String.valueOf(date[1]));
    repairPlanVO.setAge(String.valueOf(date[2]));
    repairPlanVO.setAdress(String.valueOf(date[3]));
    } resRet.add(yourVo);
    }
    }
      

  4.   


    StringBuilder hql = new StringBuilder();
    hql.append("SELECT ")
    .append(  "a.id, ")
    .append(  "a.name, ")
    .append(  "a.age, ")
    .append(  "ab.adress ")
    .append("FROM ")
    .append(  "A a ")
    .append(  "left outer join a.b ab ")
    .append("WHERE ...") Session session = this.getSession();
    Query query = session.createQuery(hql.toString());List<Object[]> tempList = query.list();if (tempList != null && tempList.size() > 0)
    {
    YourVo yourVo = null;
    Object[] date = null;
    for (int i=0; i<tempList.size(); i++)
    {
    yourVo = new YourVo();
    date = tempList.get(i);
    if (date != null && date.length > 0)
    {
    repairPlanVO.setId(String.valueOf(date[0]));
    repairPlanVO.setName(String.valueOf(date[1]));
    repairPlanVO.setAge(String.valueOf(date[2]));
    repairPlanVO.setAdress(String.valueOf(date[3]));
    } resRet.add(yourVo);
    }
    }
      

  5.   

    试下把hibernate换成ibatis,可能会简单的多
      

  6.   

    我这样写为什么部队select a.ab001,a.ab002,a.ab006,b.aa002 as ab003 from DbXtwhBmb as a left outer join DbXtwhRyb as b where a.ab004='0' and a.ab003=b.aa001;还有就是hibernate能不能有方法直接写SQL语句,对他失去信心了!!
      

  7.   

    不知道你说的做了映射是指什么,如果是做了一对多关联,那不需要写HQL,直接在a里面加一个SET 属性,用来存放b里的数据,直接对a查询就成了
    比如Set bs
    取b的值,只需要用
    Iterator it=a.getBs().iterator();
    int i=0;
    while(it.hasNext()){
      b b1=new b();
      b1=(b)it.next();
      .....
    }
    这里b指的是b表的那个pojo类如果想用HQL也可以
    String sql1="from a a1, b b1 where a1.name=b1.name and a1.id='"+id+"'";
    List list1=null;
    list1=((org.hibernate.classic.Session) session).createQuery(sql1).list();
    Iterator it=list1.iterator();
    Object[] obj=(Object[])it.next();
    a a11=new a();
    b b11=new b();
    a11=(a)obj[0];
    b11=(b)obj[1];到这估计你该会搞了,有几个表关联,obj对象里就会有多大,按照SQL里表的顺序,到obj里取出来强制转换就成。这个在hibernate的一些资料里面也有。代码我就是简单写了一下,你自己调试吧
      

  8.   

    1.hibernate 不查询所有 就用Object[] 数组接收数据
    2.你可以用视图查询数据
      

  9.   

    我这样查String hsql="select a.ab001,a.ab002,a.ab006 "
         +" from DbXtwhBmb as a "
         +"where a.ab004='0'";
         System.out.println("java report : hsql : "+hsql);
        
         return getHibernateTemplate().find(hsql);
    就查不出来  而hsql="from DbXtwhBmb as a where a.ab004='0'";就能查出来  晕了我从网上查说可以这样写
      

  10.   

    使用Hibernate时要注意, hsql里的表名不一定是真正的表名, 是映射后的名字, 也就是在你hbm文件里的名字。
    还有最好把常用查询都做成视图(如果这些表没有外键关联的话)
    如果有外键关联, 就更方便了。 映射的实体类里面就能取得其他关联表的数据。
      

  11.   

    注:以下 A为自定义的JavaBean。
    SessionFactory sessionFactory=Configuration.buildSessionFactory("hibernate.cfg.xml");
    Session session=sessionFactory.currentSession();
    String hql="select new A(a.ab001,a.ab002,a.ab006,b.aa002 as ab003) from db_xtwh_bmb as a left outer join db_xtwh_ryb as b on  a.ab003=b.aa001 where a.ab004='0'";
    Query query=session.createQuery(hql);
    List<A> list=query.list();
    return list;
      

  12.   

    String   hsql="select   a.ab001,a.ab002,a.ab006   " 
            +"   from   DbXtwhBmb   as   a   " 
            +"where   a.ab004= "0 ""; 
            System.out.println("java   report   :   hsql   :   "+hsql); 
            
            return   getHibernateTemplate().find(hsql); 
    就查不出来     而hsql="from   DbXtwhBmb   as   a   where   a.ab004= "0 "";就能查出来     晕了我从网上查说可以这样写SessionFactory   sessionFactory=Configuration.buildSessionFactory("hibernate.cfg.xml"); 
    Session   session=sessionFactory.currentSession(); 
    String   hql="select   new   A(a.ab001,a.ab002,a.ab006,b.aa002   as   ab003)   from   db_xtwh_bmb   as   a   left   outer   join   db_xtwh_ryb   as   b   on     a.ab003=b.aa001   where   a.ab004= "0 ""; 
    Query   query=session.createQuery(hql); 
    List <A >   list=query.list(); 
    return   list;
      

  13.   

    欢迎加入本人的QQ群,群号5586686,身份认证输入如:JAVA、JSP、STRUTS等都可以,非软件开发人员勿加,谢谢合作!
      

  14.   

    LZ把你解决的办法分享一下吧?我也碰到这问题了,不知道怎么解决,期待...越详细越好,先谢谢LZ!