action:
public ActionForward load(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
RightsForm rightsForm = (RightsForm) form;
String prvid = request.getParameter("prvid");
TPrivilege privilege = rightsService.get(prvid);
rightsForm.setPrivilege(privilege);
return mapping.findForward("edit");
}其中,prvid的值从页面中取出来的,不为空,但privilege为空,我转到service代码里,如下:
public TPrivilege get(String prvid) {
return (TPrivilege) dao.get(TPrivilege.class, prvid);
}
发现这里执行之后,控制台产生的hql语句里巴prvid替换成了问号?,导致结果没查出来。
我的dao代码如下:
public Object get(Class c, String id) {
return this.getHibernateTemplate().get(c, id);
}以上问题,请诸位帮忙诊断一下啊,小弟先谢谢了,好人一生平安!

解决方案 »

  1.   

    你看看service下的返回是否为空,只有测试。有没有异常?如果有贴出来看看呢……把控制台的代码发过来看看呢……
      

  2.   

    没有异常啊,service下也是空的,通过prvid,明明能查出结果啊,但这个prvid被替换了,导致查不出结果,控制台输出如下:
    select
            tprivilege0_.prvid as prvid3_0_,
            tprivilege0_.pareventId as pareventId3_0_,
            tprivilege0_.prvname as prvname3_0_,
            tprivilege0_.url as url3_0_,
            tprivilege0_.re as re3_0_,
            tprivilege0_.vieworder as vieworder3_0_,
            tprivilege0_.status as status3_0_,
            tprivilege0_.issys as issys3_0_ 
        from
            rights.dbo.t_privilege tprivilege0_ 
        where
            tprivilege0_.prvid=?
    没有产生异常,谢谢您的指点,呵呵。
      

  3.   

    hibernate 中的hql语句生成的sql语句是以?为占位符的,你调试一下看prvid有值没有,在数据库中执行hql生成的下面的查询select
      tprivilege0_.prvid as prvid3_0_,
      tprivilege0_.pareventId as pareventId3_0_,
      tprivilege0_.prvname as prvname3_0_,
      tprivilege0_.url as url3_0_,
      tprivilege0_.re as re3_0_,
      tprivilege0_.vieworder as vieworder3_0_,
      tprivilege0_.status as status3_0_,
      tprivilege0_.issys as issys3_0_  
      from
      rights.dbo.t_privilege tprivilege0_  
      where
      tprivilege0_.prvid=?
    将?换成prvid值试试看是否没有数据。
      

  4.   

    有数据啊,在数据库中能查出结果,但在action中,privilege为空,呵呵。请你多多指教!
      

  5.   

    晕 你 hibernate 没学好啊,还是jdbc 没学好啊,这个问号是填充参数的缓存,提高安全性的,你的没查到,是你的东西没值,或者没有符合条件的
      

  6.   

    在数据库里执行这条hql语句,能查询到结果的,呵呵
      

  7.   

    不关?的事,?是固定的,你还是跟踪下prvid在那里丢了值。
      

  8.   

    改Hibernate配置,让console窗口显示完整sql语句记得找到问题后把它关了,会显示所有sql,特别是父子查询的时候,一对多的sql都会出来,很耗性能
      

  9.   

    不是?的问题  那个你可以理解成一个占位符   把你的查询条件变得可动态化
       主要你给?传值的时候  那个传过来的值有问题   为NULL或是无效
      小细节   注意调试的时候  看下值的传递
      

  10.   

    想看到Hibernate自动编写的SQL语句  在配置文件你设置showsql属性为TRUE 从控制台就能找到编译好的SQL语句然后copy到SQL编译器运行  
      

  11.   

    prvid有值啊,这里没丢的,呵呵。把问号?替换成prvid的值,然后在数据库里执行,能得到结果啊,呵呵
      

  12.   

    prvid不是null,我一步一步地跟踪了啊,都是有值的,呵呵,谢谢您的耐心指点。