我正在做类似的事情:

        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:重复的关联路径:在metaData上class,但我认为这里不需要任何别名,因为我使用的是相同的条件,请您能帮我...吗?

谢谢!!!

最佳答案

我得到了答案,谢谢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...

我使用了在第一人称射击时创建的别名:)

所有人都:)

10-05 20:38