Java 使用条件休眠一对多搜索

Java 使用条件休眠一对多搜索,java,hibernate,criteria,one-to-many,Java,Hibernate,Criteria,One To Many,我有一个Hibernate实体,叫做Event,它有一个一对多元数据实体EventData 鉴于以下事件: 事件ID:1 西兰花 使用以下事件数据: EventDataId:1 事件ID:1 字段:标记 内容:tagme EventDataId:2 事件ID:1 字段:标记 内容:另一个标签 如何创建条件查询以检索同时具有标记“anotherTag”和“tagme”的事件?在SQL中,我会为搜索的每个标记加入一次event_数据表,但我似乎只能为event.EventData关系创建一个别名,即

我有一个Hibernate实体,叫做Event,它有一个一对多元数据实体EventData

鉴于以下事件:

事件ID:1
西兰花

使用以下事件数据:

EventDataId:1
事件ID:1
字段:标记
内容:tagme

EventDataId:2
事件ID:1
字段:标记
内容:另一个标签

如何创建条件查询以检索同时具有标记“anotherTag”和“tagme”的事件?在SQL中,我会为搜索的每个标记加入一次event_数据表,但我似乎只能为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++;
}
不起作用<代码>重复关联路径:Event.EventData

类似地,普通连词也不起作用,因为子句的结尾是:

((ed3_.field='tag' and ed3_.content='anotherTag') and (ed3_.field='tag' and ed3_.content='tagme'))
遗憾的是,数据库字段不能同时有两个不同的值

关于我如何清理这个问题,或者唯一的选择是恢复HQL,有什么想法吗

List fields = new ArrayList(1);
fields.add("tag")

List contents = new ArrayList(tags.size());
for ( String tag : tags ) {
    contents.add(tag);
}

session.createCriteria(Event.class);
criteria.createCriteria("eventDatas").add(Restrictions.and(Restrictions.in("field", fields), Restrictions.in("content", contents)));  
/*如果字段的大小始终为1,则还可以使用Restrictions.eq(“字段”、“标记”)*/