2012-02-16 143 views
0

當我做下面的查詢:預處理語句不起作用

return (Formation) em 
    .createQuery(
      "SELECT f FROM Formation f WHERE f.model" + modelType + "= :modelId") 
    .setParameter("modelId", modelId) 
    .getSingleResult(); 

我得到這個錯誤:

org.hibernate.PropertyAccessException:無法獲得通過反射字段值model.configuration.Model.id的吸氣

當我通過類似上面的一個醜陋查詢代替準備好的語句,它的工作原理:

return (Formation) em 
    .createQuery(
      "SELECT f FROM Formation f WHERE f.model" + modelType + "= " + modelId) 
    .getSingleResult(); 
+0

你有沒有在地層類的modelId屬性的getter和setter? – kand 2012-02-16 15:41:52

+0

我不明白爲什麼我需要一個getter和一個名爲modelId的setter,而我沒有它們,因爲我沒有任何名爲modelId的字段。 modelId不能匹配三個modelType:modelReport,modelProposal,modelInternship中的一個,爲此我有getter和setter。 – DevAntoine 2012-02-17 08:44:08

回答

0

我猜modelId是嵌套實體的ID,而不是實體本身,因此我希望這樣的事情

"SELECT f FROM Formation f WHERE f.model" + modelType + ".ModelId = :modelId")