在某些特殊的情况下,可以不用Hibernet,直接用JDBC。
因为Hibernate不可能支持所有数据库的所有特性。

解决方案 »

  1.   

    好像连substring都不支持,我用hibernate的sql检索方式
      

  2.   

    在hibernate3中好象有對decode的解析的類,----DecodeCaseFragment.java
    我看了一下,它extends CaseFragment.java     ,其中對一個list類型的解析出decode.
    我想既然有這樣類存在,應該是可以應用的.
      

  3.   

    上面兄弟,我剛才測試了一下,substring 是支持的.
      

  4.   

    對應相應database,可以看對應的dialect類,如oracle 則可以看oracledialect.java 或oracle9dialect.java
    于其中見到decode,應該是沒實現之.
    請問各位大峽們,實際中你們對decode的功能如何用其它方法實現的,難道非得直接用JDBC嗎?
      

  5.   

    这个问题可以看看createSQLQuery的帮助,这是一种方法。
    另外可以通过注册decode方法来实现。
    扩展方言类,此处扩展oracle的方言,其他数据库可以扩展相应的方言。
    public class MyOracle9iDialect
        extends OracleDialect {
      public MyOracle9iDialect(){
        super();
        registerFunction( "decode", new StandardSQLFunction(Hibernate.STRING) );
      }
    }
    在这里就注册了decode函数。
    下面是一个例子:
    Configuration config = new Configuration().addClass(Food.class);
    SessionFactory sessionFactory = config.buildSessionFactory();
    Session session = sessionFactory.openSession();
    Query query = session.createQuery("Select decode(food.foodPrice,1,'便宜','不知道贵不贵') from Food as food");
    List list = query.list();
    if(list != null){
          System.out.println((String)list.get(0));
        }
        session.close();
        sessionFactory.close();