Oracle grails中如何在条件查询中进行左连接或右连接
我正在使用Grails2.1.1。这里我有两个域名。一个是-InvIssue-另一个是-SlsDoMst-。InvIssue域中存在SlsDoMst的外键。现在,我需要找到不在InvIssue表中的所有SlsDoMst行。到目前为止,我使用的纯sql如下所示: 我的oracle查询>>>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 但我需要使用条
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)