2012-11-14 79 views
2

我使用Hibernate來讀取數據庫 數據我用下面的命名查詢:傳類名AA參數命名查詢

<query name="getTable"> 
    select tbl from ? as tbl order by col 
    </query> 

在DAO

public List<Object> selectTables(String className){ 

      Query query = session.getNamedQuery("getTable"); 
      query.setParameter(0, className); 
      return (List<Object>)query.list(); 
    } 

當我運行代碼,我得到以下例外

14:13:57,463 ERROR SessionFactoryImpl:405 - Error in named query: getTable 
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ? near line 2, column 25 [ 
    select tbl from ? as tbl order by col 

    ] 

回答

3

你不能那樣做。佔位符(?)不會由您可能傳遞的任何參數通過Hibernate取代。 HQL查詢已轉換爲SQL準備語句,佔位符是此準備語句的參數。

準備好的語句被數據庫用來計算查詢的執行計劃。因此,如果查詢甚至不包含表名,則不可能計算執行計劃。您只能將作爲參數傳遞給查詢。您無法傳遞列名稱或表名稱。

0

嘗試替換標準查詢。

 public List<Object> selectTables(Class className){ 
      Criteria criteria = session.createCriteria(className); 
      return (List<Object>)criteria.list(); 
    }