我在grails应用程序中有接下来的两个域类:

class Room {
    String name
    RoomType roomType
    def static findAllByUser = { user, params ->
        List<Room> rooms = Room.findAll("from Room r where r.roomType.user = :user", [user: user], params)
        return rooms
    }
}

class RoomType {
    String name
    User user
}

我希望能够检索由特定用户创建的所有房间。
def currentUser  = currentUser()
def rooms = Room.findAllByUser(currentUser)

为了实现这一点,我在Room域类中实现了替代方法findAllByUser。

但是,当我调用闭包时,在此行中得到了一个空指针异常。
List<Room> rooms = Room.findAll("from Room r where r.roomType.user = :user", [user: user], params)

用户不为空。因此,这一定是我可怜的HQL。谁能帮我?

最佳答案

我认为更好的选择是使用命名查询。它看起来更好,并且还可以提供更多功能:

只需将其添加到您的Room域类

static namedQueries = {
    byUser { findUser ->
        roomType {
            eq 'user', findUser
        }
    }
}

然后这样称呼它:
def roomsByUser = Room.byUser(currentUser).list()

08-28 23:23