代码一:
        private List getListByName(String sql, Object[] args)
throws RuntimeException {
Session session = getSession();
Query query = session.createQuery(sql);

if (args != null) {
for (int i = 0, size = args.length; i < size; i++) {
System.out.println("hql: " + sql);
System.out.println("param: " + args[i]);
query.setParameter(i,args[i]);
}
}
System.out.println("queryString: " + query.getQueryString());
List list = query.list();
System.out.println("result: " + list);
return list.size() == 0 ? null : list;
}执行结果:
      
hql: from Role where roleName = ?
param: ROLE_TEACHER
queryString: from Role where roleName = ?
Hibernate: 
    select
        role0_.ROLE_ID as ROLE1_9_,
        role0_.ROLE_NAME as ROLE2_9_,
        role0_.description as descript3_9_ 
    from
        EM_ROLE role0_ 
    where
        role0_.ROLE_NAME=?
result: []
      
代码二:private List getListByName(String sql, Object[] args)
throws RuntimeException {
sql = "from Role where roleName ='ROLE_TEACHER'";
Session session = getSession();
Query query = session.createQuery(sql);
/**
if (args != null) {
for (int i = 0, size = args.length; i < size; i++) {
System.out.println("hql: " + sql);
System.out.println("param: " + args[i]);
query.setParameter(i,args[i]);
}
}**/
System.out.println("queryString: " + query.getQueryString());
List list = query.list();
System.out.println("result: " + list);
return list.size() == 0 ? null : list;
}结果:
queryString: from Role where roleName ='ROLE_TEACHER'
Hibernate: 
    select
        role0_.ROLE_ID as ROLE1_9_,
        role0_.ROLE_NAME as ROLE2_9_,
        role0_.description as descript3_9_ 
    from
        EM_ROLE role0_ 
    where
        role0_.ROLE_NAME='ROLE_TEACHER'
result: [com.swallow.oes.entity.Role@12394f8]
大家能不能找到 【代码一】中是什么问题,这个问题已经托了我两三天了。急啊!!

解决方案 »

  1.   

    对帖子有什么不清楚的请先看这里:http://topic.csdn.net/u/20100325/14/227b2173-f354-4ede-a67f-aa42d6d3dd03.html?seed=713030190&r=64191534#r_64191534
      

  2.   

    query.setParameter(i,args[i]);
    这里的i 是不是应该从1开始 , 你试试看看
      

  3.   

    楼上两位, 请尊重我的专业啊。setParameter
    public Query setParameter(int position,
                              Object val)
                       throws 
    Parameters:
    position - the position of the parameter in the query string, numbered from 0.
    val - the non-null parameter value 
      

  4.   

    用debug模式。。一步步查吧。
      

  5.   

    返回前一切都很正常。  query.list()返回的是空的了。
     
    真是的找不问题,这也才是大问题。先屏蔽掉,下次遇到再说了。
    郁闷的很,刚做项目就遇到这事。。
      

  6.   

      debug调试...
     Object[]对象数组,在query.setParameter(i,args[i]);中的args[i]转为(String)args[i]。
      

  7.   

    Object有toString()方法的嘛,加不加效果一样的。
    我把args[i]改为:"'" + args[i] + "'"  还是不行的,真不知道是哪里的问题的了。
      

  8.   


            private List getListByName(String sql, Object[] args)
                throws RuntimeException {
            Session session = getSession();
            Query query = session.createQuery(sql);
            
            if (args != null) {
                for (int i = 0, size = args.length; i < size; i++) {
                    System.out.println("hql: " + sql);
                    System.out.println("param: " + args[i]);
                    //query.setParameter(i,args[i]);
                    query = query.setParameter(i,args[i]);
                }
            }
            System.out.println("queryString: " + query.getQueryString());
            List list = query.list();
            System.out.println("result: " + list);
            return list.size() == 0 ? null : list;
        }试一下
      

  9.   

    哎,终于找到问题所在了。原来是数据库的问题,看表结构:CREATE TABLE EM."EM_ROLE" 
    (
       "ROLE_ID"             INTEGER              NOT NULL,
       "ROLE_NAME"           CHAR(50),
       "DESCRIPTION"         CHAR(50),
       CONSTRAINT PK_EM_ROLE PRIMARY KEY ("ROLE_ID")
    );
    怎么会是CHAR呢???  应该是varchar2才对的,这个失误是因为我用PD直接生成的SQL,
    检查的时间没有注意到的了。     现在问题来了。
         用CHAR,在数据中用length查出role_name的长度为50没错,问题是
    用SQL:select * from em_role where role_name='ROLE_TEACHER' 是能查出来的,
    也就是帖子问题的第二段代码能实现的,问题是第一个为什么就查不出来? 这和Hibernate 有关吗??