Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过associationPath获取条件_Java_Hibernate - Fatal编程技术网

Java 通过associationPath获取条件

Java 通过associationPath获取条件,java,hibernate,Java,Hibernate,每隔一段时间,我就会得到一个“org.hibernate.QueryException:duplicate association path:myAssociation”。这是因为我使用的复杂条件可以在许多地方定义相同的路径。我想做点像这样的事情 Criteria association = myCriteria.getAssociation("wax"); if(association == null) association = myCriteria.createCriteria("wax"

每隔一段时间,我就会得到一个“org.hibernate.QueryException:duplicate association path:myAssociation”。这是因为我使用的复杂条件可以在许多地方定义相同的路径。我想做点像这样的事情

Criteria association = myCriteria.getAssociation("wax");
if(association == null) association = myCriteria.createCriteria("wax");
有没有这样的方式,我可以检查一下,如果一个协会已经到位

干杯


Nik

没有办法通过criteriaapi实现这一点。但是,如果确实需要,您可以自己维护
映射

您可以:

  • 每个条件实例都有一个映射,嵌套的条件由别名键入
  • 拥有单一的全球地图;它的键必须具有嵌套条件的别名和从根到当前条件的路径

实际上,您可以通过别名找到次标准,但代码未发布(即在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;
}
private次标准getcriteria(标准pCriteria,字符串pAlias){
迭代器iter=((criteriampl)pCriteria).iterateSubcriteria();
while(iter.hasNext()){
次标准sub=iter.next();
if(pAlias.equals(sub.getAlias())){
返回子节点;
}
}
返回null;
}

在查询中使用唯一的别名,而不是希望您想要的名称没有被使用,这不是更有意义吗?是的,这就是我最后要做的,只是保留它们。如果能够找到它们,那就太好了,不过这将为我节省大量的if测试和put.:-)