基于关联表值添加查询限制:按双UUID查询Queue问题
组合Location和QueueRoom UUID查询Queue数据的解决方法
核心问题
你这段代码的bug出在最后一行:调用queueRoomCriteria.list()相当于在查询QueueRoom实体,而不是你要的Queue实体。单独查询时可能没暴露这个问题,但组合条件时,主Criteria的过滤逻辑根本没生效。
修正后的代码
@Override public List<Queue> getAllQueuesByLocationAndQueueRoom(String locationUuid, String queueRoomUuid) { // 主查询对象始终绑定Queue实体 Criteria criteria = getCurrentSession().createCriteria(Queue.class, "q"); // 过滤已停用的队列 includeVoidedObjects(criteria, false); // 关联Location表,添加UUID匹配条件 criteria.createCriteria("location", "ql") .add(Restrictions.eq("uuid", locationUuid)); // 关联QueueRoom表,添加UUID匹配条件 criteria.createCriteria("queueRoom", "qr") .add(Restrictions.eq("uuid", queueRoomUuid)); // 关键:必须调用主criteria的list()方法返回Queue列表 return (List<Queue>) criteria.list(); }
额外提示
因为你的Queue模型中queueRoom字段允许为null(nullable=true),如果业务场景需要支持传入queueRoomUuid=null来查询无关联QueueRoom的队列,要加个判断:
if (queueRoomUuid != null && !queueRoomUuid.isEmpty()) { criteria.createCriteria("queueRoom", "qr") .add(Restrictions.eq("uuid", queueRoomUuid)); } else { // 查询没有绑定QueueRoom的队列 criteria.add(Restrictions.isNull("queueRoom")); }
内容的提问来源于stack exchange,提问作者CKW
相关产品推荐
相关产品推荐

