通过associationPath获取标准

时间:2009-11-27 14:28:46

标签: java hibernate

每隔一段时间,我就会得到一个“org.hibernate.QueryException:重复的关联路径:myAssociation”。这是因为我正在使用的复杂标准可以在许多地方定义相同的路径。我喜欢做像

这样的事情
Criteria association = myCriteria.getAssociation("wax");
if(association == null) association = myCriteria.createCriteria("wax");

有没有这样的方法可以检查关联是否已经到位?

干杯

的Nik

2 个答案:

答案 0 :(得分:5)

实际上您可以通过别名找到Subcriteria,但代码未发布(即在CriteriaImpl类中)。请参阅下面的示例:

private Subcriteria getCritria(Criteria pCriteria, String pAlias) {
    Iterator<Subcriteria> iter = ((CriteriaImpl)pCriteria).iterateSubcriteria();
    while (iter.hasNext()){
        Subcriteria sub = iter.next();
        if (pAlias.equals(sub.getAlias())){
            return sub;
        }
    }
    return null;
}

答案 1 :(得分:3)

通过Criteria API无法做到这一点。但是,如果您真的需要这样做,您可以自己保持Map

你可以:

  • 每个条件实例都有一个映射,由别名键入的嵌套条件。
  • 有一张全球地图;它的密钥必须同时具有嵌套标准的别名和从根到当前标准的路径。