簡體   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