Grails gorm findBy*具有接口属性
我确实发现了一个与此相关的问题,我也有同样的问题。链接: 是的,我们无法将接口属性更改为抽象属性 我已经读到findBy*无法处理接口属性,但有没有关于如何处理该属性的优雅提示 至于型号:Grails gorm findBy*具有接口属性,grails,interface,gorm,Grails,Interface,Gorm,我确实发现了一个与此相关的问题,我也有同样的问题。链接: 是的,我们无法将接口属性更改为抽象属性 我已经读到findBy*无法处理接口属性,但有没有关于如何处理该属性的优雅提示 至于型号: interface InterfaceClass { //method } class EnumClass implements InterfaceClass { //implementation of method } class NonEnumDomain { Interfac
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。谢谢你。非常感谢。谢谢抱歉,由于代表要求,我还不能投票。