NutzCN Logo
问答 Criteria 怎么拼一个子查询进去呢
发布于 1485天前 作者 Leewell1989 1926 次浏览 复制 上一个帖子 下一个帖子
标签:

本意是在Criteria的条件组合中拼一个子查询进去,没找到合适的方法,求解
比如要实现这样的功能:

SELECT * FROM A WHERE EXISTS(
    SELECT 1 FROM B WHERE B.FK = A.KEY
)

A有对应的entity,所以一般查询是在Servcie中继承NameEntityServcie,直接query(Cnd)就可以了,那么当Cnd中需要拼一个非in子查询条件,该怎么实现呢?

10 回复

也想过用这个Sql直接创建一个视图,用@View指定这个视图,但是如果这个条件是动态的呢,就又不得哦

我自己刷了100此浏览..哦不,是101次了,哈哈

这就是 a and (b or c) 范式吧

a and 子查询, 类似于 a andInBySql,但又不是 字段名 in 子查询这样

SELECT * FROM A WHERE 1=1  AND EXISTS(
    SELECT 1 FROM B WHERE B.FK = A.KEY
)

其实只要SqlExpressionGroup支持一下自定sql就好了,比如:
Criteria cri = Cnd.cri();
cri.where().and("自定义子查询");

找到解决方案了, 先上代码:

cri.where().and(new Static("EXISTS(SELECT 1 FROM DUAL)"));

说明一下:SqlExpressionGroup的方法一般都可以接收SqlExpression类型的参数,比如and(SqlExpression exp) or(SqlExpression exp),而SqlExpression这个接口有个Static实现类,这就很棒了,直接new Static("自定义sql")就可以了。

哦, 原来是你找的是Static类....

哈哈,一般要么sql整体是自定义的,要么就要么就不需要自定,这种Criteria里边塞一个自定义的还没写过,所以一直没发现这个Static...

添加回复
请先登陆
回到顶部