首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate标准和/或多到多

Hibernate标准和/或多到多
EN

Stack Overflow用户
提问于 2014-08-07 13:50:49
回答 1查看 176关注 0票数 0

这是我正在运行的查询:

代码语言:javascript
复制
    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();

它应该得到所有的优惠券:

  • 在startTime有效
  • 与用户有关
  • 全局的或与某一特定地点有关的
  • 未赎回
  • 未删除
  • 已激活

这些优惠券与景点有着多到多的关系。这种关系有效--这个查询确实返回了与被查询的点具体相关的优惠券。不幸的是,它从不返回全局优惠券,即使数据库中根本没有“本地”优惠券。

有什么建议吗?我们将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-08-07 14:17:52

尝试使用析取,并查看:

代码语言:javascript
复制
 .add( Restrictions.disjunction().add(Restrictions.eq("global", Boolean.TRUE))
                              .add(Restrictions.eq("spotsAlias.id", spot.getId())))

此外,如果全局是实体中的属性,则需要使用:

代码语言:javascript
复制
Restrictions.eq("global", Boolean.TRUE)

此外,如果您引用限制类,则它只有

代码语言:javascript
复制
eq(String propertyName, Object value) 

方法,该方法将对象作为第二个参数,而不是基元类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25184332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档