gpt4 book ai didi

java - 使用 Criteria 的 Hibernate 一对多搜索

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:46 25 4
gpt4 key购买 nike

我有一个名为 Event 的 Hibernate 实体,它有一个一对多的元数据实体 EventData。

给定以下事件:

事件编号:1
事件哈希:西兰花

具有以下事件数据:

事件数据ID:1
EventId:1
字段:标签
内容:tagme

事件数据ID:2
事件编号: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++;
}

不起作用; 重复关联路径: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)));

/* 如果字段的大小总是一个,你也可以使用 Restrictions.eq("fields", "tag")*/

关于java - 使用 Criteria 的 Hibernate 一对多搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com