我正在编写一个搜索界面,用户可以从中选择几个不同实体的字段。这是一个使用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的别名。
有人有更好的解决方案吗?
答案 0 :(得分:1)
我认为您当前的解决方案最好。 尽管CriteriaImpl有一个迭代创建的Subcriteria的方法(createAlias将创建一个Subcriteria),但是接口(Criteria)不提供此方法,因此使用它不会“很好”。即便如此,我仍然会选择你的解决方案(尽管我建议在这种情况下使用Set而不是List)。