gpt4 book ai didi

java - Hibernate:获取现有的子标准

转载 作者:太空宇宙 更新时间:2023-11-04 13:17:19 30 4
gpt4 key购买 nike

我有这个代码:

 Disjunction d = Restrictions.disjunction();
... // d is set up here
criteria.createCriteria(linkedEntityVariable).add(d);

它可能会在 linkedEntityVariable 中以相同的值运行两次。如果发生这种情况,我会得到:

duplicate association path: identityCards\norg.hibernate.loader.criteria.CriteriaQueryTranslator.createAssociationPathCriteriaMap(CriteriaQueryTranslator.java:171)

如何获取我的子标准而不是再次尝试创建它?

最佳答案

子标准列表存储在Criteria 的私有(private)字段中。可以使用 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);

关于java - Hibernate:获取现有的子标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33434675/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com