但是用HQL写死查询FWUser.id=1141211141781 
就可以得到对象了,感到很奇怪

解决方案 »

  1.   

    直接用这种方式得到不好么?
    deleteObj = (FWUser)sn.createQuery("HQL查询语句").uniqueResult();
      

  2.   

    uid是什么类型数据?先直接写deleteObj = (FWUser)session.load(FWUser.class,"1141211141781");试试可不可以,然后再判断。
      

  3.   

    如果是int,那么你的数值越界了。
    int:
    –2147483648 to 2147483647
      

  4.   

    你这个是好的FWUser.id=1141211141781 ,但这种表示不是字符
      

  5.   

    public void deleteTheFWUserByUID(String uid) throws Exception { 
    SessionFactory sessionFactory = HibernateDBService.getSessionFactory(); 
    Session session = null; 
    Transaction tx = null; 
    try { 
    session = sessionFactory.openSession(); 
    tx = session.beginTransaction(); String hql = "from FWUser as userClass where userClass.id= :uid"; 
    System.out.println(hql); 
    Query query = session.createQuery(hql).setString("uid", uid); 
    FWUser deleteObj = (FWUser) query.list().get(0); 
    session.delete(deleteObj); 
    session.flush(); 
    tx.commit(); 
    deleteObj = null; 

    catch (Exception e) { 
    e.printStackTrace(); 
    if (tx != null) { 
    // Something went wrong; discard all partial changes 
    tx.rollback(); 
    } } 
    finally { 
    // No matter what, close the session 
    session.close(); 


    数据库主键为字符串型的 
    上面的查询会找不到对象,但是只要将查询方式改成 
    String hql ="from FWUser as userClass where userClass.id="+uid; 
    就可以找到对象了,为什么呢?
      

  6.   

    将hibernate.cfg.hbm里面的sql --->false   设成true
    看一下后台hibernate打印出的sql语句
      

  7.   

    表的主键是CHAR 会自动填充空格 ,但是为什么我手动输入SQL也能查到呢