Spring QueryDSL与BooleanBuilder的交叉联接
简易布尔生成器Spring QueryDSL与BooleanBuilder的交叉联接,spring,jpa,querydsl,Spring,Jpa,Querydsl,简易布尔生成器 booleanBuilder.and(QOrder.order.validationStatus.eq(ValidationStatus.ACCOUNTED)) .and(QOrder.order.orderAddress().id.isNull()); 生成交叉连接 from order order0_ cross join order_address orderaddr1_ where order0_.id=orderaddr1_.order_id and order0
booleanBuilder.and(QOrder.order.validationStatus.eq(ValidationStatus.ACCOUNTED))
.and(QOrder.order.orderAddress().id.isNull());
生成交叉连接
from order order0_ cross join order_address orderaddr1_ where
order0_.id=orderaddr1_.order_id and order0_ .validation_status=? and
(orderaddr1_.order_id is null)
因此,它永远不会工作,因为交叉连接总是返回空结果集,因此不会发生is null检查。除了直接使用JPAQuery之外,还有其他解决方案吗?你找到解决方案了吗?这是一段很长的时间,但我想它已经被重写了,没有QDSL。也许我们通过为DSL指定一些关于关系的提示来消除交叉连接。我们没有使用
.join(qAction.order().address())
而是使用.join(qAction.order(),QOrder.order)
并将地址引用为QOrder.order.address()
使DSL查询生成器的订单地址关系更加明显。如果我没有记错的话,DSL只是在没有这个的情况下进行交叉连接。好的,我已经尝试了这两种方法,但都没有成功,但是我的查询正在为连接实体的子实体生成交叉连接。因此,没有明确指定联接的意思。我想唯一的方法就是在实体本身中指定它。仍然没有成功。谢谢你的时间。你能发送这个查询吗?你找到解决方案了吗?这是很长时间了,但我想它已经被重写了,没有QDSL。也许我们通过为DSL指定一些关于关系的提示来消除交叉连接。我们没有使用.join(qAction.order().address())
而是使用.join(qAction.order(),QOrder.order)
并将地址引用为QOrder.order.address()
使DSL查询生成器的订单地址关系更加明显。如果我没有记错的话,DSL只是在没有这个的情况下进行交叉连接。好的,我已经尝试了这两种方法,但都没有成功,但是我的查询正在为连接实体的子实体生成交叉连接。因此,没有明确指定联接的意思。我想唯一的方法就是在实体本身中指定它。仍然没有成功。谢谢您的时间。您能发送查询吗?