Я использую Hibernate для реализации страницы поиска, где могут использоваться или не использоваться другие критерии. Одним из критериев является ID
в SpecialTable
. Другим критерием является "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
Есть какие-нибудь решения? Мои псевдонимы разные, но все равно не работает.