我正在使用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
}
答案 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