【问题标题】:Grails - CreateCriteria to Retrieve any entry that contains any element in queryGrails - CreateCriteria 检索包含查询中任何元素的任何条目
【发布时间】:2023-03-22 07:06:01
【问题描述】:

鉴于我有这个域:

class Game {
   Set<GameType> gameType
   String name
}

还有这个枚举:

enum Gametype {
    RHYTHM, ADVENTURE, PUZZLE, RPG, HORROR, FIGHTING, MOBA, MMO
}

我需要检索包含至少一个查询中指示的游戏类型的游戏列表。我尝试使用此代码:

def retrieveGamesThatMayBeUnderGameTypes( List<GameType> listOfGameTypes) {
   return Game.createCriteria().list(){
      'in'("gameType", listOfGameTypes)
   }
}

但是,它返回 NullPointerException。有什么想法吗?

【问题讨论】:

    标签: grails hql criteria


    【解决方案1】:

    只需确保您的枚举 (Gametype) 有一个名为 id 的字段。类似的东西:

    enum Gametype {
        RHYTHM('RHYTHM'),
        ADVENTURE('ADVENTURE'),
        ....
    
        String id
    
        Gametype(String id) {
            this.id = id
        }
    }
    

    请参阅此答案以获取更多信息:Grails Enum Mapping

    【讨论】:

    • 必须是名为id的字段吗?它可以是另一种数据类型吗?可以是另一个域或枚举吗?
    • 它需要被称为id - 这是规则否则hibernate不知道如何引用bean的值。 id 列可以是任何类型,但不仅仅是 String
    • 我明白了。目前,数据库没有枚举表。添加 id 会导致枚举拥有自己的表吗?
    • 不,您不必在数据库中拥有该表,但没有什么可以阻止您添加该表。事实上,如果您直接查询该表或有其他系统使用该数据,则最好将这个表放在您的数据库中。
    • 它不会抛出 NullPointerException,但它现在返回一个空列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多