Java org.hibernate.QueryException:重复关联路径:元数据

Java org.hibernate.QueryException:重复关联路径:元数据,java,hibernate,criteria,andromda,Java,Hibernate,Criteria,Andromda,我在做一些事情,比如: Criteria criteria = getSession().createCriteria(Employee.class); Criteria metaDataCriteria = criteria.createCriteria("metaData"); Criteria contractCriteria = metaDataCriteria.createCriteria("currentRunningContract"

我在做一些事情,比如:

        Criteria criteria = getSession().createCriteria(Employee.class);
        Criteria metaDataCriteria = criteria.createCriteria("metaData");
        Criteria contractCriteria = metaDataCriteria.createCriteria("currentRunningContract");

        if (key.equals("directorate")) {
            contractCriteria.createCriteria(key).add(Restrictions.in("id", (Long[])parameters.get(oKey)));
        }

        if (key.equals("grade")) {
            contractCriteria.createCriteria(key).add(Restrictions.in("id", (Long[])parameters.get(oKey)));
        }

        if (key.equals("gradeLevel")) {
            contractCriteria.createCriteria(key).add(Restrictions.in("id", (Long[])parameters.get(oKey)));
        }
很明显,我在这里做的是将子标准添加到contractCriteria,这取决于在我通过函数传递的关联数组中是否找到了键,但我在元数据类上得到了异常:org.hibernate.QueryException:duplicate association path:,但我不认为我需要任何别名,因为我使用相同的标准,你能帮我吗


谢谢

我得到了答案谢谢Pritesh Shah,这是解决方案

    Criteria criteria = getSession().createCriteria(Employee.class, "employee").createCriteria("metaData", "mData").createCriteria("currentRunningContract", "currentContract");
        if (key.equals("directorate")) {
            criteria.createCriteria("currentContract."+key).add(Restrictions.in("id", (Long[])parameters.get(oKey)));
        }Blahblah etc...
我使用了我在firs一枪中创建的别名:)


Cya all:)

如果要在标准内部的标准上添加具有相同字段名的限制,则必须添加别名请参阅使用
SqlRestriction
存在的解决方法。