异常org.hibernate.QueryException: could not resolve property的原因

今天遇到一个非常古怪的问题 异常org.hibernate.QueryException: could not resolve property,这是自己在测试整合的Hib遇到的问题,处于对ecplise的信任,一直感觉是我调用的问题

 List list=mPersonDAO.findByProperty("firstName", "Zhang");

这是测试代码,想筛选 firstName 为Zhang的数据

一下是系统生成的源码

public List findByProperty(String propertyName, Object value) {
      log.debug("finding Person instance with property: " + propertyName
            + ", value: " + value);
      try {
         String queryString = "from Person as model where model." 
                                 + propertyName + "= ?";
         Query queryObject = getSession().createQuery(queryString);
         queryObject.setParameter(0, value);
         return queryObject.list();
      } catch (RuntimeException re) {
         log.error("find by property name failed", re);
         throw re;
      }
    }

这是系统生成的 map

<hibernate-mapping>
    <class name="com.database.Person" table="person" catalog="test">
        <composite-id name="id" class="com.database.PersonId">
            <key-property name="id" type="java.lang.Integer">
                <column name="id" />
            </key-property>
            <key-property name="firstName" type="java.lang.String">
                <column name="FirstName" length="5000" />
            </key-property>
            <key-property name="lastName" type="java.lang.String">
                <column name="LastName" length="5000" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>

百度了很多,也没有明确的问题,崩溃了!!!!!!!

有没有发现 Person里面还有一层id, 有木有 有木有 坑爹!!!!!

所以系统生成的代码不对 

  String queryString = "from Person as model where model." 
                                 + propertyName + "= ?";

要在套一层

  String queryString = "from Person as model where model.id." 
                                 + propertyName + "= ?";

这样就OK 了!!尼玛!!

posted on 2013-10-24 18:03  _star  阅读(3245)  评论(0)    收藏  举报

导航