【发布时间】:2014-09-30 19:15:01
【问题描述】:
这是我正在运行的查询:
List<Coupon> coupons = getDb().createCriteria(Coupon.class)
.add(Restrictions.le("validFrom", startTime.getTime()))
.add(Restrictions.ge("validUntil", startTime.getTime()))
.add(Restrictions.eq("user", user))
.createAlias("spots", "spotsAlias")
.add(Restrictions.or(
Restrictions.eq("isGlobal", true),
Restrictions.eq("spotsAlias.id", spot.getId())
))
.add(Restrictions.eq("isRedeemed", false))
.add(Restrictions.eq("isDeleted", false))
.add(Restrictions.eq("isActive", true))
.addOrder(Order.asc("isGlobal"))
.addOrder(Order.desc("validFrom"))
.list();
它应该得到的所有优惠券是:
- 开始时有效
- 与用户相关
- 全局或与特定地点相关
- 未兑换
- 未删除
- 已激活
优惠券与景点是多对多的关系。关系有效 - 此查询确实返回与查询地点特别相关的优惠券。不幸的是,它从不返回全局优惠券,即使数据库中根本没有“本地”优惠券。
有什么建议吗?非常感谢您的帮助!
【问题讨论】:
-
尝试使用 disjunction()?
标签: java mysql hibernate many-to-many hibernate-criteria