具有接口(interface)属性的 Grails gorm findBy*

标签 grails interface grails-orm

我确实找到了一个相关的问题,我也有同样的问题。链接:Grails FindBy* with an inteface property

是的,我们不能将 Interface 属性更改为抽象属性。

我读过 findBy* 无法处理接口(interface)属性,但是关于我们如何继续处理的任何优雅提示?

至于型号:

interface InterfaceClass {
    //method
}

class EnumClass implements InterfaceClass {
    //implementation of method
}

class NonEnumDomain {
    InterfaceClass interfaceClass
}

回到这个问题,还有关于 findBy 限制的站点链接。
NonEnumDomain.findByInterfaceClass(....) won't work.

如果社区需要知道:我们在这些接口(interface)属性上做了一些 UserType,因为它是一个 Enum 属性。

谢谢

最佳答案

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

因此,假设您希望拥有两个名为: 的属性。名称和描述在您的界面类中。在那里创建 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
    }
}

现在让查找器方法适用于您的接口(interface)类 ,您只需添加 接口(interface)类 域类中的属性到 嵌入式 属性列表。
class NonEnumDomain {
    InterfaceClass interfaceClass

    static embedded = ['interfaceClass']
}

保存 NonEnumDomain 的实例:
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")) 

的定义嵌入式 关键词:

Supports embedding domain components into domain classes. An embedded component does not store its data in its own table as a regular domain class relationship does. Instead, the data is included in the owner's table. The embedded component class is typically declared in the same source file as the owning class or in its own file under src/groovy. Constraints can also be applied over properties of embedded components using Validateable annotation.

关于具有接口(interface)属性的 Grails gorm findBy*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32177408/

相关文章:

java - 运行页面刷新后发生的线程(失控线程)

grails - LinkageError 使用数据库迁移插件(加载器先前为不同类型初始化)

java - Proguard 将重写的方法保留在扩展另一个接口(interface)的接口(interface)内

缺少 grails 4 groovy 的日期增强方法

grails - 如何在 Grails 3.0.3 中更改 Application.groovy 类的位置?

typescript - 以下语法是什么意思?

c# - 如何从未知的 com 对象接口(interface)(例如连接点)获取 guid?

Grails 域和 @Canonical

Grails 3.1.1 - 当模型类扩展另一个 groovy 类时,脏检查不起作用

grails-orm - Grails 2.0 的多数据源特性是否支持关系?