【发布时间】:2011-03-14 08:21:00
【问题描述】:
我有一个名为 Event 的 Hibernate 实体,它有一个一对多的元数据实体 EventData。
鉴于以下事件:
事件 ID:1
EventHash:西兰花
使用以下 EventData:
EventDataId:1
事件 ID:1
字段:标签
内容:标签
EventDataId:2
事件 ID:1
字段:标签
内容:另一个标签
如何创建条件查询来检索同时具有“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?
【问题讨论】:
标签: java hibernate criteria one-to-many