2012-02-16 112 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")