【问题标题】:org.hibernate.QueryException: duplicate association path: metaDataorg.hibernate.QueryException:重复关联路径:元数据
【发布时间】:2013-06-27 13:49:48
【问题描述】:

我正在做类似的事情:

        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 类上,但我认为我在这里不需要任何别名,因为我使用的是相同的标准,你能帮我吗...?

谢谢!!!

【问题讨论】:

  • 如果您在标准内的标准上添加具有相同字段名称的限制,则必须添加别名
  • 查看here 一种使用SqlRestrictionexists 的解决方法。

标签: java hibernate criteria andromda


【解决方案1】:

感谢 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-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多