如何使用grails中的条件与2表连接

时间:2016-01-06 09:32:10

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

使用grails 2.1.1,我需要使用左连接构建一个包含2个表的查询。如果我在oracle中查询它,它正在工作并给我正确的结果。当我使用grails控制器时,我收到错误。有人可以帮我这个吗?

以下是我的尝试:

我的查询适用于oracle:

def items = SlsDoMst.executeQuery('select a from sls.dlo.SlsDoMst a left outer join  inv.InvIssue b on a.id = b.slsDoMst.id where b.slsDoMst.id is null')

我在grails控制器中使用的hql查询:

unexpected token: on near line 1, column 66 [select a from sls.dlo.SlsDoMst a left outer join  inv.InvIssue b on a.id = b.slsDoMst.id where b.slsDoMst.id is null]

我得到的错误:

    class SlsDoMst {

    ...

    static mapping = {
        ...
    }

    static constraints = {
        ...
    }
}

我的域名如下:

我的SlsDoMst域>>>

    class InvIssue{
    static mapping = {
        table 'INV_ISSUE'
        slsDoMst column: 'SLS_DO_MST_MID',ignoreNotFound: true
        ...
    }

    ...
    SlsDoMst slsDoMst

    static constraints = {
    ...
    }
}

我的InvIssue域>>>

def login_request (username, password)
  request = {'userName': username, 'password': password}.to_json
  url = "#{$url_host}#{$login_api}"
  begin
    res = RestClient.post(
        url,
        request,
        :content_type => :json, :accept => :json,
        :verify_ssl => false)
    response_data = JSON.parse(res.body) 
    $user_token = response_data['token'] 
    $userId = response_data['user']['userId'] 
    p response_data['user']['email'] 
  rescue Exception => e
  end
end

1 个答案:

答案 0 :(得分:1)

您不能将on用于HQL中的左连接。 Hibernate通过模型定义决定将哪个列用于join子句。

您需要在HQL上使用的模型上定义关系(例如hasMany)和mapping

以下是参考: https://grails.github.io/grails-doc/2.4.3/ref/Database%20Mapping/joinTable.html