这是我正在运行的查询:
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();它应该得到所有的优惠券:
这些优惠券与景点有着多到多的关系。这种关系有效--这个查询确实返回了与被查询的点具体相关的优惠券。不幸的是,它从不返回全局优惠券,即使数据库中根本没有“本地”优惠券。
有什么建议吗?我们将非常感谢您的帮助!
发布于 2014-08-07 14:17:52
尝试使用析取,并查看:
.add( Restrictions.disjunction().add(Restrictions.eq("global", Boolean.TRUE))
.add(Restrictions.eq("spotsAlias.id", spot.getId())))此外,如果全局是实体中的属性,则需要使用:
Restrictions.eq("global", Boolean.TRUE)此外,如果您引用限制类,则它只有
eq(String propertyName, Object value) 方法,该方法将对象作为第二个参数,而不是基元类型。
https://stackoverflow.com/questions/25184332
复制相似问题