2014-04-09 57 views
1

我創建了一個通用的方法,該方法將採取hibernate named query,一個HashMap對象包含在以下方式命名的查詢參數名稱值:如何將通用參數設置爲Hibernate的查詢對象?

的方法簽名是:

public static <T> ArrayList<T> getData(String hibernateQueryName, HashMap<?, ?> 
              queryNameValue) throws Exception; 

現在假設我有一個SQL及其hibernateQueryName是EMPDATA:

SELECT e.emp_nm  AS EMP_NAME 
    , e.emp_address AS EMP_ADDR 
    FROM employee e 
WHERE e.emp_no > :empNumber 
    AND e.name LIKE :empName 

這裏empNumberempName是參數的姓名和他們AR e分別爲Integer和String類型。

現在假設我有一個更多的SQL和hibernateQueryName是studentData:

SELECT s.s_nm AS EMP_NAME 
    FROM student s 
WHERE s.dob > :studentDOB 

這裏studentDOB是參數名稱及Date類型。 studentDOB是我將從HashMap獲得的一個關鍵。

我要設置這些參數和值來查詢對象,如:

Query query = getSession().getNamedQuery(hibernateQueryName); 
query.setXXX(parameterName, parameterValue); 

上面的代碼寫在我getData方法。

有是基於Type例如query.setInteger()但調用這個我需要找到它,我傳遞getData方法的?種類繁多query.setXXX方法。是否有可能使用未知類型的query.setXXX方法?

+0

我認爲你可能需要重寫你的問題的澄清。你問如何在查詢中使用你的'getData'參數? –

+0

@JordanD我編輯了我的問題。請讓我知道我是否能夠澄清我的觀點。 – Vishrant

回答

1

嘗試使用query.setParameter("name", value)這並不期望顯式類型。

+0

謝謝。 'value'是'Object'類型,hibernate是否在使用它在命名查詢中使用它,如查詢中那樣,我們可能有不同的類型,比如Date,String,Int ...? – Vishrant

+1

我會建議嘗試一下,如果遇到另一個特定問題,請編輯您的原始問題。只要您不嘗試轉換不兼容的類型,hibernate會照顧類型。 –

1

query.set參數的簽名是

void QueryInstance.setParameter(String, Object);

你可以使用HashMap<String,Object>作爲參數,在方法迭代,並指定爲每提到的方法。它將起到通用的作用。我已經通過這種方式,這也可能有助於你的情況。

+1

謝謝@Prakash。 – Vishrant

相關問題