Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Hibernate 如何确定条件实例是否已具有子标准?_Hibernate_Hibernate Criteria - Fatal编程技术网

Hibernate 如何确定条件实例是否已具有子标准?

Hibernate 如何确定条件实例是否已具有子标准?,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,我正在编写一个搜索界面,用户可以从几个不同实体的字段中进行选择。这是一个使用Hibernate3的SpringMVC(3.0.5)应用程序 我的DAO类必须能够灵活地响应这些请求。我想使用这样的方法: critAliases = new ArrayList<String>(); ... Session session = (Session) getEntityManager().getDelegate(); crit = session.createCriteria(RootEnt

我正在编写一个搜索界面,用户可以从几个不同实体的字段中进行选择。这是一个使用Hibernate3的SpringMVC(3.0.5)应用程序

我的DAO类必须能够灵活地响应这些请求。我想使用这样的方法:

critAliases = new ArrayList<String>();
...

Session session = (Session) getEntityManager().getDelegate();
crit = session.createCriteria(RootEntity.class);

// selected search options from user
for ( SearchOption opt: searchOptionList ) {
    if ( ! critAliases.contains(opt.getAlias()) ) {
        crit.addAlias(opt.getEntityName(), opt.getAlias(), opt.getJoinType());
        critAliases.add(opt.getAlias());
    }
}
critAlias=newArrayList();
...
会话会话=(会话)getEntityManager().getDelegate();
crit=session.createCriteria(RootEntity.class);
//从用户选择的搜索选项
for(SearchOption选项:searchOptionList){
如果(!critAlias.contains(opt.getAlias())){
crit.addAlias(opt.getEntityName(),opt.getAlias(),opt.getJoinType());
添加(opt.getAlias());
}
}
注意,我必须使用实例变量跟踪别名

List<String> critAliases
列出别名
在我的刀课上

我更愿意询问Criteria实例是否已包含与opt.getAlias()字符串匹配的子标准。Criteria接口公开了一个getAlias()方法,该方法将用于根实体,但没有用于检查或列出条件别名的方法


有谁有更好的解决方案吗?

我认为你目前的解决方案是最好的。 尽管CriteriaImpl有一个方法来迭代所创建的子标准(createAlias将创建一个子标准),但接口(标准)不提供该方法,因此使用该方法并不“好”。即使是这样,我仍然会选择您的解决方案(尽管我建议在此场景中使用集合而不是列表)