GORM 使用外键代替域对象

Spa*_*323 2 grails grails-orm

假设我有一个User包含Organization字段的域对象。我可以使用外键映射它,并让 hibernate 处理其余的事情,如下所示:

class User {

    String id
    String firstName
    Organization organization

    static mapping = {
        table 'user'
        id column: "user_id", generator:'assigned'
        organization column: 'organization_Id'
    }
}

class Organization {

    String id
    String name
    String address

    static mapping = {
        table 'organization'
        id column: "organization_id", generator:'assigned'
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我想查询组织中的所有用户时,我可能必须这样做

String orgId = "some id"
Organization org = Organization.findById(orgId)
List<User> users = User.findAllByOrganization(org)
Run Code Online (Sandbox Code Playgroud)

不必传递Organization域对象而只需传递 Organization.Id(表上的外键)会很方便User

我希望我的代码如下所示:

String orgId = "some id"
List<User> users = User.findAllByOrganization(orgId)
Run Code Online (Sandbox Code Playgroud)

经过研究,这似乎是不可能的,我需要首先查询Organization然后使用该对象。有我不知道的方法吗?

doe*_*eri 5

我喜欢的一种方法是使用域对象的代理而不是它的水合实例。您可以使用load()来获取代理。这意味着只要您不访问id.

def users = Users.findByOrganization(Organization.load(orgId))
Run Code Online (Sandbox Code Playgroud)