【问题标题】:How to left or right join in criteria query in grails如何在grails中的条件查询中左或右加入
【发布时间】:2016-01-14 09:23:59
【问题描述】:

我正在使用 grails 2.1.1。在这里,我有 2 个域。一个是-InvIssue-,另一个是-SlsDoMst-。 InvIssue 域中有一个SlsDoMst 的外键。现在我需要找到所有不在 InvIssue 表中的 SlsDoMst 行。到目前为止,我现在使用普通 sql 如下::

我的预言机查询>>>

    SELECT MS. *
FROM SLS_DO_MST MS
LEFT OUTER JOIN INV_ISSUE ISS ON MS.MID = ISS.SLS_DO_MST_MID

但我需要使用标准查询来做到这一点。我的域名如下::

邀请问题>>>

    class InvIssue{
    String clnCode
    Long id
    SlsDoMst slsDoMst
    String remk
}

SlsDoMst >>>

    class SlsDoMst {
    Long id
    String code
}

【问题讨论】:

  • 我认为最好用 HQL 编写。标准更适合用于简单的事情 - 它的代码更漂亮,但如果你想更好地使用 JOIN 来使用 HQL,它会更清晰
  • 它可能与使用 hasMany 或 hasOne 的关系。但就我而言,没有 hasMany 或 hasOne
  • 所以,你用 hql 来做 :)
  • @Koloritnij 现在是的

标签: oracle grails criteria grails-2.0 hibernate-criteria


【解决方案1】:

我已经用 hql 和 gorm 查询完成了,如下所示。希望对你有用>>>

def ids = inv.InvIssue.executeQuery("select iss.slsDoMst.id From inv.InvIssue iss where iss.slsDoMst.id is not null")
    def list = SlsDoMst.findAll()
    if(ids.size() > 0){
        list = SlsDoMst.findAllByIdNotInList(ids)
    }

【讨论】:

    【解决方案2】:

    这可能有效:

    import static org.hibernate.sql.JoinType.*
    
    def list = InvIssue.withCriteria {
        createAlias 'slsDoMst', 'mst', RIGHT_OUTER_JOIN
    
        projections {
            property 'mst'
        }
    
        isNull 'id'
    }
    

    我只是不确定投影是否有效。如果没有,您可以使用此 HQL:

    select b from InvIssue as a right outer join a.slsDoMst as b where a.id is null
    

    【讨论】:

    • 显示这条消息 :: join type not supported by OracleJoinFragment (use Oracle9iDialect/Oracle10gDialect)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多