Java 通过associationPath获取条件
每隔一段时间,我就会得到一个“org.hibernate.QueryException:duplicate association path:myAssociation”。这是因为我使用的复杂条件可以在许多地方定义相同的路径。我想做点像这样的事情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"
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.:-)