例如数据库中有个表
表名:Student
字段名分别是:id,name,sex,address我只返回name和sex的所有数据,即select name,sex from student
那么HQL语句该如何写?

解决方案 »

  1.   

    SQL好像就可以当HQL用吧。。特别是这种简单的
      

  2.   

    HQL 最简单的...你可以看看JAVA的啊JAVA中應用最多啦可以去 這裡看看:www.wyjava.cn
      

  3.   

    给你这个参考下
    很全的http://www.redsaga.com/hibernate-ref/3.2/html_single/index.html
      

  4.   

    public Domain.Made[] LoadAll(string datapropertys)
            {
                List<Domain.Made> list = new List<Domain.Made>();
                using (ISession sn = Service.ORM.Instance.NewSession())
                {
                   //运行的时候下面出错了。。不知何解
                   list = (List<Domain.Made>)sn.CreateSQLQuery("select madename,model,ms from Made").List<Domain.Made>();
                }
                return list.ToArray();
            }
      

  5.   

    不行呀。。大家帮忙下给个HQL语句我呀
      

  6.   

    select name,sex from student student是一个类
    name sex是student的属性上面就是HQL语句.
      

  7.   


    我知道呀。。那些name跟属性我都是对应好的了
    但是他报了个错:
    Return types of SQL query were not specified [select  m.MadeName,m.MadeFirstLetter,m.ID  from Made m ] public Domain.Made[] LoadAll(string datapropertys) 
            { 
                List <Domain.Made> list = new List <Domain.Made>(); 
                using (ISession sn = Service.ORM.Instance.NewSession()) 
                { 
                  //运行的时候下面出错了。。不知何解 
                  list = (List <Domain.Made>)sn.CreateSQLQuery("select madename,model,ms from Made").List <Domain.Made>(); 
                } 
                return list.ToArray(); 
            }
      

  8.   

    以前我用castle框架的时候用过,光看错误暂时还看不出那错了.
      

  9.   

    在输出的资料型态上,需要指定成NHibernate的类型
    ZhuJi.Modules.CountModule.Domain.CountHour domainCountHour = new ZhuJi.Modules.CountModule.Domain.CountHour();
                     hql = string.Format("Select Top 1 * From CountHour as tmp Where tmp.Ip Like '{0}' And DATEDIFF(d,tmp.Addtime,'{1}')=0", ip, addTime);
                     ISQLQuery sqlQuery = session.CreateSQLQuery(hql);
                     sqlQuery.AddScalar("Id", NHibernateUtil.Int32);
                     sqlQuery.AddScalar("Ip", NHibernateUtil.String);
                     sqlQuery.AddScalar("Pvs", NHibernateUtil.Int32);
                     sqlQuery.AddScalar("Ips", NHibernateUtil.Int32);
                     sqlQuery.AddScalar("Cookies", NHibernateUtil.Int32);
                     sqlQuery.AddScalar("AddTime", NHibernateUtil.DateTime);
                     IList<ZhuJi.Modules.CountModule.Domain.CountHour> listCountHour = sqlQuery.List<ZhuJi.Modules.CountModule.Domain.CountHour>();
      

  10.   


    public Domain.Made[] LoadAll(string datapropertys)
            {
                List<Domain.Made> list = new List<Domain.Made>();
                using (ISession sn = Service.ORM.Instance.NewSession())
                {
                    //list = (List<Domain.Made>)sn.CreateSQLQuery("select " + datapropertys + " from Made m ").List<Domain.Made>();
                    string hql = "select " + datapropertys + " from Made";
                    ISQLQuery sqlQuery = sn.CreateSQLQuery(hql);
                    sqlQuery.AddScalar("MadeName", NHibernateUtil.String);
                    sqlQuery.AddScalar("MadeFirstLetter", NHibernateUtil.String);
                    sqlQuery.AddScalar("ID", NHibernateUtil.Int32);
                   
                    
                    list = (List<Domain.Made>)sqlQuery.List<Domain.Made>();
                }
                return list.ToArray();
            }运行后报错:值“System.Object[]”不是“Domain.Made”类型,不能在此泛型集合中使用。
    源码:行 72:                 list = (List<Domain.Made>)sqlQuery.List<Domain.Made>();还是不行哦
      

  11.   

    你这拆装箱操作太多了吧.这个方法改了.
    public IList<Made> LoadAll(string datapropertys) 
            { 
                List <Domain.Made> list = new List <Domain.Made>(); 
                using (ISession sn = Service.ORM.Instance.NewSession()) 
                { 
                    //list = (List <Domain.Made>)sn.CreateSQLQuery("select " + datapropertys + " from Made m ").List <Domain.Made>(); 
                    string hql = "select " + datapropertys + " from Made"; 
                    ISQLQuery sqlQuery = sn.CreateSQLQuery(hql); 
                    sqlQuery.AddScalar("MadeName", NHibernateUtil.String); 
                    sqlQuery.AddScalar("MadeFirstLetter", NHibernateUtil.String); 
                    sqlQuery.AddScalar("ID", NHibernateUtil.Int32); 
                  
                    
                    return sqlQuery.List <Domain.Made>(); 
                } 
                
            } 
      

  12.   

    你这拆装箱操作太多了吧.这个方法改了.
    public IList<Made> LoadAll(string datapropertys) 
            { 
                List <Domain.Made> list = new List <Domain.Made>(); 
                using (ISession sn = Service.ORM.Instance.NewSession()) 
                { 
                    //list = (List <Domain.Made>)sn.CreateSQLQuery("select " + datapropertys + " from Made m ").List <Domain.Made>(); 
                    string hql = "select " + datapropertys + " from Made"; 
                    ISQLQuery sqlQuery = sn.CreateSQLQuery(hql); 
                    sqlQuery.AddScalar("MadeName", NHibernateUtil.String); 
                    sqlQuery.AddScalar("MadeFirstLetter", NHibernateUtil.String); 
                    sqlQuery.AddScalar("ID", NHibernateUtil.Int32); 
                  
                    
                    return sqlQuery.List <Domain.Made>(); 
                } 
                
            }
      

  13.   

    如果对象名是student(类的名字)不是表的名字啊,大部分情况下跟表的名字相同 也有不同的
    那么hql语句是:select stu.name,stu.sex from student as stu;