Hibernate QueryException无法解析属性

时间:2009-10-11 10:11:39

标签: java hibernate java-ee

我有这个.hbm.xml文件:

       Evenement.hbm.xml :

      <hibernate-mapping package="com.af.evenement">
         <class name="Evenement" table="TB_EVENEMENT">

         <id name="id" type="string" column="CODE_EVENEMENT">
               <generator class="assigned" />
         </id>

         <set name="causesAnnexes">
            <key column="CODE_EVENEMENT" />
            <one-to-many class="CausesAnnexesEvt" />
         </set>
         ........

我得到了另一个.hbm.xml文件:CausesAnnexesEvt:

       <class name="CausesAnnexesEvt" table="TB_CAUSESANNEXES_EVT">
           <composite-id name="id" class="CausesAnnexesEvtPK">
               <key-many-to-one 
                    class="Evenement"
                    column="CODE_EVENEMENT"
                    name="Evenement"
                />
                <key-many-to-one
                    class="Cause"
                    column="CODE_CAUSE"
                    name=cause"
                 />

                 </composite-id>
          </class>

当我尝试使用以下代码行删除Evenement对象时:

       Session s=getCurrentSession();
       tx=s.beginTransaction();
       s.delete(evenement);
       s.flush();
       s.clear();

当我运行上面的代码时,我得到以下异常:

      QueryException : could not resolve property : causesAnnexesEvt.

2 个答案:

答案 0 :(得分:0)

Hibernate在您的班级causesAnnexesEvt中查找名为Evenement的字段,但找不到它。确保类中的字段和hbm.xml中的列定义使用相同的名称。

答案 1 :(得分:0)

session.delete()不会抛出显示的异常。要么你没有向我们展示完整的代码(堆栈跟踪会有帮助,顺便说一句)或者它是在会话工厂初始化期间抛出的(从getCurrentSession()内部调用?)因为你的一个命名查询无法解析。 / p>

因此,虽然Aaron认为缺少causesAnnexesEvt属性是导致此异常的原因,但您的帖子中绝对没有任何内容暗示它应该是Evenement的属性。搜索causesAnnexesEvt的所有命名查询,并查看哪一个引用它以及它想要从哪个实体获取它。