这个……太高深了些帮呆鸟顶一下,^_^hibernate我还没入门呢

解决方案 »

  1.   

    其实今晚我去泡澡了,工作太累了^_^ 回来没想到这么晚了:(
    想法可行的啊, 一开始我也这样想的。不过你可以使用setParameter(String name, Object val, Type type)  而且这样做是被推荐的
    因为如你查看它的原码就是Query接口的实现类。AbstractQueryImpl.java
    =====================
             ....
    public Query setParameter(String name, Object val, Type type) {
    if( !actualNamedParameters.contains(name) ) {
     throw new IllegalArgumentException("Parameter " + name + " does not exist as a named parameter in [" + getQueryString() + "]");
    }
    else {
     namedParameters.put(name, new TypedValue(type, val) );
     return this;
    }
    }
    public Query setString(String name, String val) {
    setParameter(name, val, Hibernate.STRING);
    return this;
    } public Query setTime(String name, Date date) {
    setParameter(name, date, Hibernate.TIME);
    return this;
    } public Query setTimestamp(String name, Date date) {
    setParameter(name, date, Hibernate.TIMESTAMP);
    return this;
    } public Query setBigDecimal(int position, BigDecimal number) {
    setParameter(position, number, Hibernate.BIG_DECIMAL);
    return this;
    }
             ....
    ===============================
      

  2.   


    如果你想更智能的话,就用setProperties(Object bean),他就是靠反射来实现的。
    这个bean需要是个VO..有一系列的getter方法
    原代码
    ==========================
    public Query setProperties(Object bean) throws HibernateException {
    Class clazz = bean.getClass();
    String[] params = getNamedParameters();
    for (int i = 0; i < params.length; i++) {
    String namedParam = params[i];
    try {
    Getter getter = ReflectHelper.getGetter(clazz, namedParam);
    setParameter( namedParam, getter.get(bean), guessType( getter.getReturnType() ) );
    }
    catch (PropertyNotFoundException pnfe) {}
    }
    return this;
    }
      

  3.   

    ???hibernate?
    String queryString =
    " from PartItem as partItem where partItem.tOrderCheck.OrderCheckid= " +OrderCheckid;//参数就这样加不就行了吗?管他什么样的写在HQL里面不就好了
          Query query = ss.createQuery(queryString);
          Iterator itr=null;
              itr = query.iterate();
          while (itr.hasNext()) {
    }
      

  4.   

    给你一个例子看看对你有没有用:
    Session session;
    String loginName;
    int age;
    List users1 = session.find("FROM User user WHERE user.loginName = ?", loginName, Hibernate.STRING);
    List users2 = session.find("FROM User user WHERE user.age > ?", age, Hibernate.INTEGER);
      

  5.   

    菜鸟我有个疑问,看了土豆仙给的setParameter()方法,使用这个方法,不是还要自己判断传进来的参数是什么类型吗?另外想听听反射的概念。学习。。再顶一个
      

  6.   

    暂时还没有接触Hibernate,帮你up吧。
      

  7.   

    Hibernate没用过,还不知干啥的,学学了
      

  8.   

    我不懂Hibernate但是我觉得如果query.setXXX();中的xxx变量都是基本类型的话,可以用工厂模式解决啊!如果说错了,还请多多包含:)
      

  9.   

    今天中午看了会totodo指点的两个函数
    setProperties和setParameter觉得和我的想法有点差别。我先说说我是怎么想的。
    我是这么想的。
    定义一个持续化层(PersistenceLayer)操作(Operation)的接口(Interface);
    定义Interface是为了以后移植方便,比方,这次我使用Hibernate,下次我可能使用CMP或者JDO来实现持续化。
    我只需替换该PersistenceLayerInterface的Impl就可以了(这里可用Factory)。在这个PersistenceLayerInterface里,我定义了一个Method
    public Collection getObjectListFromDBWithConditions(Object o, Collection conditions, int pageSize, int pageIndex) throws AppException;
    顺便说一下,在这个Method里,我用了自定义异常(AppException);于是,我在HibernatePersistenceLayerOperImpl.class这个类里,
    我企图通过
    Object o
    来得到我想要找的广义Object(我是觉得Hibernate这点作的不比EJB差,很对象化 OO,包含了Relationship,我很喜欢,嘻嘻)在调用getObjectListFromDBWithConditions这个Method之前,我已经创建了一些
    SQLConditionBean
    (它很简单,就3个成员变量:  
    String name;
    Object value;
    String conditionRelation = " and ";
    是个标准JavaBean)
    并把它们(SQLConditionBean)放入
    Collection conditions
    传给
    getObjectListFromDBWithConditions在这个Method里,就像大多数Hibernate操作一样(略,直到),
    sb.append(sqlCondition.getConditionRelation() + "object." + sqlCondition.getName() + "=:" + sqlCondition.getName());
    (上面形成查询HQL)接下来就到了
    query.setXXX(sqlCondition.getValue());因为我的sqlCondition.getValue()返回的是个Object,所以,我就希望,能够根据返回的Object Type(or Class)
    来调用相应的
    query.setXXX();(背景介绍完。)中午看了
    setProperties
    的源码之后,觉得也不是很理想,因为它需要的是一个包含对应paraName的value,而我的
    SQLConditionBean
    已经指定名字为
    Object value;
    了,所以,会报NotSuchMethodException;
    我很苦恼!
    其实,它(setProperties)更适合于Hibernate的DataBean,而不是我的SQLConditionBean;于是,我转而考虑
    setParameter
    也就是Schlemiel(维特根斯坦的扇子) 推荐的。
    但是,它(setParameter)的第三个参数Type,是比较麻烦的。
    以我对Hibernate的了解,我不知道有什么方法可以快捷地创建一个根据
    sqlCondition.getValue()
    而得到的Type???
    (哪位熟悉Hibernate的可不要吝啬咯!)废话比较多,无非抛砖引玉,期待高手指点迷津。
    也希望让初学者多接触一些。附:我的Hibernate完全师承 totodo(土豆仙) ,
    我没有用Hibernate做过实际项目,他有。
    各位Hibernate爱好者可要向他请教咯,多拍拍他马屁就可以了。嘿嘿。
    我只看过Hibernate的一些API和Doc,example;
      

  10.   

    在调用getObjectListFromDBWithConditions这个Method之前,我已经创建了一些
    SQLConditionBean
    (它很简单,就3个成员变量:  
    String name;
    Object value;
    String conditionRelation = " and ";
    是个标准JavaBean)===================sigh,原来就这么个问题啊……不要太简单哦。做个映射表,键是value的真实类型,值是Hibernate的持久类型,就像这样:private static final Map _typeMap = new HashMap();
    _typeMap.put(Integer.class, Hibernate.INTEGER);
    _typeMap.put(String.class, Hibernate.STRING);
    ...再加个getType()方法:getType() {
      return _typeMap.get(value.getClass());
    }这么个小问题都搞不掂,sigh,笨鸟呀笨鸟。
      

  11.   

    To: Schlemiel(维特根斯坦的扇子) Hibernate没有自己提供这个getType()?要我自己写(不要笑我懒,嘻嘻)?抑或参考?
    package net.sf.hibernate.type;public final class TypeFactory {
    private static final Map BASIC_TYPES;
    static {
    HashMap basics = new HashMap();
    basics.put( boolean.class.getName(), Hibernate.BOOLEAN);
    basics.put( long.class.getName(), Hibernate.LONG);
    ...
    我是希望尽可能抽象和重复利用+Refactor;
    ????再Up
      

  12.   

    我……我算明白了,感情呆鸟这是在玩我们呢?
    用TypeFactory.basic(value.getClass().getName())不就能获得对应的Type了吗?你还问个什么劲?下次再敢提这种问题!
      

  13.   

    头晕得不行,看了半天都没搞懂呆鸟的意思不过被Schlemiel(维特根斯坦的扇子)这么一说,好像呆鸟是在故意跟自己绕圈子哦该罚!
      

  14.   

    to: Schlemiel(维特根斯坦的扇子) and zcjl() 
    不是啦。我一开始真的不知道,
    我前面都已经说过了,
    我都没怎么接触过Hibernate(超级呆菜鸟),
    对它很不了解,都是受大家的启发,然后自己再去搜索它的源码,
    偶然发现的。我只是想知道,
    大家一般的做法比我的想法好在什么地方啦。。不要那么介意嘛。我也看源码看得老眼昏花先So...个rry!!!大家把心得提供出来嘛,
    让初学者少走些弯路也好嘛。to: totodo(土豆仙) ,
    你不要藏私,我知道你有很多绝招的。
      

  15.   

    我是一只小小小小鸟帮你ding~~~~~~~~~~~~~~~`
      

  16.   

    难得难倒了呆鸟啊!可惜偶没用过Hibernate,可惜可惜,只能帮你up了