我有这段代码:
linkedEntityVariable
它可以在sudo chmod 777 [path of file]
中以相同的值运行两次。如果它发生了,我得到:
重复关联路径: identityCards \ norg.hibernate.loader.criteria.CriteriaQueryTranslator.createAssociationPathCriteriaMap(CriteriaQueryTranslator.java:171)
如何获取子标准而不是第二次尝试创建它?
答案 0 :(得分:0)
子标准列表存储在Criteria
的私有字段中。可以使用Apache Commons Lang 3中的FieldUtils
来读取它。从Subcriteria
开始,可以使用getPath()
读取路径。
所以我通过这段代码实现了我所需要的东西:
Disjunction d = Restrictions.disjunction();
... // d is set up here
Criteria linkedEntitySubcriteria = null;
try {
List<CriteriaImpl.Subcriteria> subcriteriaList =
(ArrayList) FieldUtils.readField(criteria, "subcriteriaList", true);
for (CriteriaImpl.Subcriteria subcriteria : subcriteriaList) {
if (subcriteria.getPath().equals(linkedEntityVariable)) {
linkedEntitySubcriteria = subcriteria;
break;
}
}
}
catch (IllegalArgumentException | IllegalAccessException e) {
System.out.println("Can't get subcriteria");
}
if (linkedEntitySubcriteria == null) {
linkedEntitySubcriteria = criteria.createCriteria(linkedEntityVariable);
}
linkedEntitySubcriteria.add(d);