繁体   English   中英

休眠条件和/或多对多

[英]Hibernate criteria and/or with many-to-many

这是我正在运行的查询:

    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();

应该可以得到所有的优惠券:

  • 在开始时间有效
  • 与用户有关
  • 全局或与特定地点有关
  • 未兑换
  • 未删除
  • 活性

优惠券与景点之间存在多对多关系。 关系有效-此查询确实返回与所查询地点特别相关的优惠券。 不幸的是,即使数据库中根本没有“本地”优惠券,它也不会返回全局优惠券。

有什么建议么? 帮助将不胜感激!

尝试使用析取并查看:

 .add( Restrictions.disjunction().add(Restrictions.eq("global", Boolean.TRUE))
                              .add(Restrictions.eq("spotsAlias.id", spot.getId())))

另外,如果global是您实体中的属性,则需要使用:

Restrictions.eq("global", Boolean.TRUE)

另外,如果您参考限制类,则仅具有

eq(String propertyName, Object value) 

将对象作为第二个参数而不是原始类型的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM