我正在做类似的事情:
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类上,但我认为我不需要任何别名,因为我使用相同的标准,你能帮我吗?
感谢!!!
答案 0 :(得分:3)
我得到了答案谢谢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...
我使用了我在第一次创建的一个镜头中创建的别名:)
Cya all:)