如何在grails中

时间:2016-01-14 09:24:00

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

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

我的oracle查询>>>

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

但我需要使用条件查询来执行此操作。我的域名如下::

InvIssue>>>

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

SlsDoMst>>>

    class SlsDoMst {
    Long id
    String code
}

2 个答案:

答案 0 :(得分:0)

我用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)
    }

答案 1 :(得分:0)

这可能有效:

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