我在执行查询时遇到问题。我想做的是通过MyDomainB的查询来查询MyDomainA中“字符串代码”中的数据。表之间的关系是单向一对一的。
可以使用gorm方法来做到这一点吗?
域A:
class LicenceType {
String code
String description
Double price
static constraints = {
}
}
表域A
code description
A this is A
B this is B
C this is C
域B :(具有单向关系)
class VoiceUser {
LicenceType licenceType
String username
String email
String nameID
}
表域B
User
1
2
3
4
我想做的是知道有多少用户具有相同的代码(代码是DomainA的一列,并且两个表都具有我之前指出的单向关系)。
这是我正在尝试这样做是错误的...控制器:
def resulta = VoiceUser.executeQuery('SELECT a.code, COUNT(b.nameID) FROM VoiceUser AS b INNER JOIN b.licenceType AS a GROUP BY a.code')
def resultCount = resulta[0]
我希望这是一些示例结果...
Users with code A = 2
Users with code B = 2
Users with code C = o
诀窍是在上执行group by
,code
然后在count()
上执行user
。您可以使用HQL或条件查询来执行此操作。
这是HQL中的一个示例:
VoiceUser.executeQuery('SELECT licence.code, COUNT(user) FROM VoiceUser AS user INNER JOIN user.licenceType AS licence GROUP BY licence.code')
如果您熟悉SQL,那么其中大多数应该马上就有意义。一个重要的区别是加入域类的语法。HQL处理域类,而不处理表。
这是等效条件查询。
VoiceUser.withCriteria {
projections {
licenceType {
groupProperty('code')
}
count('id')
}
}
上面显示的查询返回List<List>
如下所示:
[
['A', 2],
['B', 2],
['C', 0]
]
如果您提供一个LicenceType
(或它的代码)作为查询的输入,那么您就可以得到那个的计数LicenceType
。例如,以下示例检索许可证代码“ A”的用户计数。
def result = VoiceUser.executeQuery('SELECT COUNT(user) FROM VoiceUser AS user INNER JOIN user.licenceType AS licence WHERE licence.code = :code', [code: 'A'])[0]
def result = VoiceUser.createCriteria().get {
licenceType {
eq('code', 'A')
}
projections {
count('id')
}
}
我有一系列文章介绍了HQL,条件以及详细的查询。例如如何使用投影和联接。随时检查他们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句