gpt4 book ai didi

sql - 用HQL查询多对多联接表

转载 作者:行者123 更新时间:2023-12-02 14:58:57 26 4
gpt4 key购买 nike

我需要一些有关创建hql查询的建议。

情况:我有一套Nodes,可以为其分配可配置数量的Flags。为此,我具有以下类/表:

类:

class Node {
String name
}

class Flag {
String name
}

class NodeHasFlag {
Node node
Flag flag
boolean value
}

带有一些样本数据的结果表:
Node
id, name
1, 'a'
2, 'b'
3, 'c'
...

Flag
id, name
1, 'visible'
2, 'special'
...

NodeHasFlag
node_id, flag_id, value
1, 1, true // node 'a' is visible
2, 1, false // node 'b' is not visible
2, 2, true // node 'b' is special
3, 1, false // node 'c' is not visible
...

现在,我需要一个hql查询来获取基于标志的节点列表。

像:给我所有 visiblespecial的节点

或者:给我所有 visiblespecial值未定义的节点(在 NodeHasFlag表中没有条目)

检查单个标志很容易,但是同时检查多个标志给我带来麻烦。

我正在使用Grails和Gorm,但我认为标准Java Hibernate的问题将相同

最佳答案

我认为您可以通过子查询解决此问题。第一个示例可能看起来像这样。第二个示例将需要LEFT JOIN和OR IS NULL限制。

    select n from Node n
where n.id in
(select n2.id from Node n2
join n2.flags f2
where f2.visible = :visibleValue)
and n.id in
(select n3.id from Node n3
join n3.flags f3
where f3.special = :specialValue)

关于sql - 用HQL查询多对多联接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318230/

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