我在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()