3

我正在做类似的事情:

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

谢谢!!!

4

1 回答 1

4

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

我使用了我在第一时间创建的别名 :)

齐亚所有:)

于 2013-07-01T09:47:28.663 回答