Oracle grails中如何在条件查询中进行左连接或右连接

Oracle grails中如何在条件查询中进行左连接或右连接,oracle,grails,criteria,grails-2.0,hibernate-criteria,Oracle,Grails,Criteria,Grails 2.0,Hibernate Criteria,我正在使用Grails2.1.1。这里我有两个域名。一个是-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 但我需要使用条

我正在使用Grails2.1.1。这里我有两个域名。一个是-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
}

我已经用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)
    }
这可能会奏效:

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

我认为最好用HQL编写。标准更好地用于简单的事情-它可以使代码更漂亮,但是如果您想更好地使用连接来使用HQL,那么使用hasMany或hasOne的关系将更加清晰。但是在我的例子中没有hasMany或hasOneso,您可以使用hql:)@Koloritnij是现在显示此消息::
OracleJoinFragment不支持连接类型(使用Oracle9iDialect/Oracle10gDialogue)