如何确定Criteria实例是否已具有Subcriteria?

时间:2012-03-21 14:24:27

标签: hibernate hibernate-criteria

我正在编写一个搜索界面,用户可以从中选择几个不同实体的字段。这是一个使用Hibernate 3的Spring MVC(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());
    }
}

请注意,我必须使用实例变量跟踪别名

List<String> critAliases

在我的DAO课程中。

我更愿意询问Criteria实例是否已包含与我的opt.getAlias()字符串匹配的Subcriteria。 Criteria接口公开了一个getAlias()方法,该方法将对root实体执行,但没有方法来检查或列出Criteria的别名。

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

1 个答案:

答案 0 :(得分:1)

我认为您当前的解决方案最好。 尽管CriteriaImpl有一个迭代创建的Subcriteria的方法(createAlias将创建一个Subcriteria),但是接口(Criteria)不提供此方法,因此使用它不会“很好”。即便如此,我仍然会选择你的解决方案(尽管我建议在这种情况下使用Set而不是List)。