Я столкнулся с проблемой при попытке программно построить объект Criteria на основе критериев поиска пользователя.Проще говоря, пользователь может ввести один или несколько критериев поиска, и на основе того, что они вводят, я создаю объект Criteria, выполняю запрос на его основе и отображаю результаты.К сожалению, когда я использую определенные критерии поиска вместе, я получаю эту ошибку:
повторяющийся путь ассоциации: назначения
В моей базе данных есть таблица с проблемами (называемая Проблема).К проблеме может быть назначено несколько человек в разных ролях (например, ей могут быть назначены аудитор и специалист по обеспечению качества).Назначения хранятся в отдельной таблице, называемой Назначение.Таблицы выглядят примерно так:
+-------------+ +-----------------+
| Issue | | Assignment |
+-------------+ +-----------------+
| issueID | | assignmentID |
+-------------+ | issueID |
| assigneeID |
| isActive |
| reviewType |
+-----------------+
Столбец IssueID является первичным ключом в Issue и внешним ключом в Assignment.
В моем коде Java у меня есть что-то вроде этого:
public List<MortalityCase> searchCases(SearchCriteria criteria)
{
Criteria search = HibernateUtil.getSession().createCriteria(Issue.class);
if ( criteria.getIssueNumber() != null )
{
search.add(Restrictions.eq("issueNumber", criteria.getIssueNumber()));
}
...
if ( criteria.getAuditor() != null )
{
search.createCriteria("assignments")
.add(Restrictions.eq("assignee", criteria.getAuditor()))
.add(Restrictions.eq("isActive", "Y"))
.add(Restrictions.eq("reviewType", getReviewType(TypeOfReview.AUDITOR)));
}
if ( criteria.getQASpecialist() != null )
{
search.createCriteria("assignments")
.add(Restrictions.eq("assignee", criteria.getQASpecialist()))
.add(Restrictions.eq("isActive", "Y"))
.add(Restrictions.eq("reviewType", getReviewType(TypeOfReview.QA_SPECIALIST)));
}
...
return search.list();
}
Это прекрасно работает, если пользователь ищет проблемы, назначенные либо аудитору, либо специалисту по контролю качества.Однако, если пользователь пытается найти проблему, назначенную как данному Аудитору, так и данному Специалисту по контролю качества, я получаю сообщение об ошибке, упомянутое выше.
Я нашел эту тему на форумах Hibernateкоторый был запущен 7 лет назад и указывает на то, что это ограничение для Hibernate.Я надеялся, что с тех пор что-то было бы сделано с этим, но поток фактически оставался «живым» до июня 2010 года без упоминания ответа / исправления.
Есть ли способ сделать то, что япытаясь достичь здесь?