У меня есть сущность Hibernate, называемая Event, в которой есть сущность метаданных «один ко многим», EventData.
С учетом следующего события:
EventId: 1
EventHash: брокколи
Со следующими EventDatas:
EventDataId: 1
EventId: 1
Поле: тег
Содержимое: tagme
EventDataId: 2
EventId: 1
Поле: тег
Содержимое: anotherTag
Как создать запрос Criteria для извлечения события, имеющего ОБА теги «anotherTag» и «tagme»?В SQL я присоединяюсь к таблице event_data один раз для каждого искомого тега, но я могу только создать один псевдоним для отношения Event.EventData, то есть
int inc = 0;
Conjunction junc = Restrictions.conjunction();
for ( String tag : tags ) {
crit.createAlias("e.EventData", "ed"+inc);
junc.add(
Restrictions.and(
Restrictions.eq("ed"+inc+".field", "tag"),
Restrictions.eq("ed"+inc+".content", tag)
)
);
inc++;
}
Не работает;duplicate association path: Event.EventData
Точно так же обычная конъюнкция не работает, потому что предложение заканчивается как:
((ed3_.field='tag' and ed3_.content='anotherTag') and (ed3_.field='tag' and ed3_.content='tagme'))
и, к сожалению, поле базы данных не может иметь два разных значения вв то же время.
Есть какие-нибудь идеи относительно того, как я могу это убрать, или это единственный вариант возврата к HQL?