【发布时间】:2018-09-16 22:55:51
【问题描述】:
我正在使用 Hibernate 来实现一个搜索页面,其中可能使用或不使用不同的条件。一个标准是SpecialTable 中的ID。另一个标准是"Or" 在MainTable 或SpecialTable 中。一切都是可选的。
假设我同时提供标准#1 和#2。在这种情况下,我想以不同的别名分别加入SpecialTable 两次,因为这些条件不相互依赖。
// Optional Criterion #1
if (searchCriteria.getSpecialId() != null) {
criteriaQuery.createAlias("specialTable", "specialTableJoin1", JoinType.INNER_JOIN);
criteriaQuery.add(Restrictions.eq("specialTableJoin1.id", searchCriteria.getSpecialId()));
}
// ...
// Optional Criterion #2
if (!StringUtils.isBlank(searchCriteria.getRequestPublicationTitle())) {
criteriaQuery.createAlias("specialTable", "specialTableJoin2", JoinType.LEFT_OUTER_JOIN);
String titleForQuery = "%" + searchCriteria.getRequestPublicationTitle().replaceAll("^.*,", "").trim() + "%";
Disjunction requestOrPublicationTitle = Restrictions.disjunction();
requestOrPublicationTitle.add(Restrictions.ilike("title", titleForQuery));
requestOrPublicationTitle.add(Restrictions.ilike("specialTableJoin2.publicationTitle", titleForQuery));
错误:
org.hibernate.QueryException: duplicate association path: specialTable
有什么解决办法吗?我的别名不同,但它仍然不起作用。
【问题讨论】:
标签: hibernate hibernate-criteria