这可以在createCriteria()中转换吗?
SELECT * FROM node WHERE (node.type = 'act' AND nid NOT IN (SELECT nid FROM snbr_act_community)) LIMIT 10
我知道有一个'in'运算符,这是我到目前为止所拥有的:
def c = VolunteerOpportunity.createCriteria()
def matchingActs = c.list {
node {
eq('type', 'act')
}
maxResults(10)
}
只想看看这是否可行。否则,我想这在HQL中是可能的吗?
答案 0 :(得分:19)
感谢Sammyrulez的代码。从中得到了一个想法。测试了它,但没有用。我修好了,这是最终的工作代码:
def ids = [14400 as long, 14401 as long]
def c = VolunteerOpportunity.createCriteria()
def matchingActs = c.list {
node {
eq('type', 'act')
not { 'in'(ids) }
}
maxResults(10)
}
现在我知道如何使用'not'运算符。非常感谢!
答案 1 :(得分:8)
我自己没试过,但是看看Grails doc和hibernate api,你可以使用Hibernate Criteria API 1的Restrictions类中的静态方法在这个构建器映射上创建节点。像
这样的东西 def c = VolunteerOpportunity.createCriteria()
def matchingActs = c.list {
node {
not(in('propertyName', ['val1','val2']))
}
maxResults(10)
}
因为你使用not方法链接in方法(返回Criterion)(以Criterion作为参数并返回否定版本)
答案 2 :(得分:1)
这是解决方案:
def resultat=EnteteImputationBudgetaire.createCriteria().get{
between("dateDebutPeriode", dateDebut, dateFin)
and{ eq 'natureImputationBudgetaire','FONCTIONNEMENT' }
maxResults(1)
}
def resultat2=ParametragePlanBudgetaire.createCriteria().list() {
like('composantBudgetaire','6%')
if(resultat?.details) {
not {
'in'('composantBudgetaire',resultat?.details?.imputationBudgetaire)
}
}
}
答案 3 :(得分:1)
根据Grails有关创建条件here的文档,您可以使用以下内容:
not {'in'("age",[18..65])}
在此示例中,您有一个名为"age"
的属性,并且您希望获得不在18到65之间的行。当然,[18..65]
部分可以替换为任何值列表或你需要的范围。
答案 4 :(得分:1)
记住:在这种情况下,您不必使用括号,您可以使用@import "lib/bourbon/app/assets/stylesheets/bourbon";
// example of bourbon mixin usage
a.tooltip-anchor + .tooltip:after {
content: "";
position: relative;
top: -12px;
@include triangle(6.5em 2.5em, #FF0000, down);
}
,例如:
inList