Grails gorm findBy*具有接口属性

Grails gorm findBy*具有接口属性,grails,interface,gorm,Grails,Interface,Gorm,我确实发现了一个与此相关的问题,我也有同样的问题。链接: 是的,我们无法将接口属性更改为抽象属性 我已经读到findBy*无法处理接口属性,但有没有关于如何处理该属性的优雅提示 至于型号: interface InterfaceClass { //method } class EnumClass implements InterfaceClass { //implementation of method } class NonEnumDomain { Interfac

我确实发现了一个与此相关的问题,我也有同样的问题。链接:

是的,我们无法将接口属性更改为抽象属性

我已经读到findBy*无法处理接口属性,但有没有关于如何处理该属性的优雅提示

至于型号:

interface InterfaceClass {
    //method
}

class EnumClass implements InterfaceClass {
    //implementation of method
}

class NonEnumDomain {
    InterfaceClass interfaceClass
}
回到问题上来,同样是关于findBy限制的站点链接

NonEnumDomain.findByInterfaceClass(....) won't work.
如果社区需要知道:我们对这些接口属性做了一些UserType,因为它是一个枚举属性


谢谢

在这里,我假设您可以完全控制接口类,对于所需的属性,它声明了getter和setter方法

假设您希望在接口类中有两个名为:name和description的属性。在那里创建getter和setter方法声明,不要在那里声明属性

interface InterfaceClass {
    String getName()

    String getDescription()

    void setName(String name)

    void setDescription(String description)
}
EnumClass类将包含这些属性,并将实现InterfaceClass

class EnumClass implements InterfaceClass {
    String name
    String description

    String getName() {
        return name
    }

    void setiName(String name) {
        this.name = name
    }

    String getDescription() {
        return description
    }

    void setDescription(String description) {
        this.description = description
    }
}
现在要使finder方法适用于接口类,只需将域类中的接口类属性添加到嵌入的属性列表中即可

class NonEnumDomain {
    InterfaceClass interfaceClass

    static embedded = ['interfaceClass']
}
要保存非numDomain的实例,请执行以下操作:

new NonEnumDomain(interfaceClass: new EnumClass(name: "Sandeep Poonia", description: "Interface property in domain class")).save(failOnError: true, flush: true)
以及使用查找器查找实例:

NonEnumDomain.findByInterfaceClass(new EnumClass(name: "Sandeep Poonia", description: "Interface property in domain class")) 
嵌入式关键字的定义:

支持将域组件嵌入域类。嵌入的 组件不会将其数据作为常规域存储在自己的表中 阶级关系确实如此。相反,数据包含在所有者的 桌子嵌入式组件类通常在同一文档中声明 源文件作为所属类或在src/groovy下的自己的文件中。 约束也可以应用于嵌入组件的特性 使用可验证的注释


制作另一个domian类来实现您的接口,然后在您的域中使用它。如果我正确理解您的注释,域将看起来像>接口IterfaceClass{}另一个类实现InterfaceClass{}域{另一个类anotherClass}
code
是这样吗?然而,在我们的案例中,下面的场景域{IterfaceClass interfaceClass}为垃圾邮件感到抱歉。但为了清楚起见:如果我正确理解了您的评论,域将具有实现接口的域类,而不是将接口作为属性的域。是这样吗?然而,就我们的情况而言,是后者;域的属性上有接口。你能发布你的接口和域吗?我在我们的模型上为此添加了设置。拥有NonEnumDomain类的原因是interfaceClass,因为有几个EnumClass正在实现interfaceClass。谢谢你。非常感谢。谢谢抱歉,由于代表要求,我还不能投票。