gpt4 book ai didi

grails - Grails:在域类中进行继承搜索

转载 作者:行者123 更新时间:2023-12-02 14:23:03 25 4
gpt4 key购买 nike

我的Grails应用程序中有这两个领域模型(Domain Model)

class Pet {
String prop1
String prop2
}

还有这个
class Cat extends Pet {
String prop3
String prop4
}

现在,在我的应用程序中,我有许多扩展 Pets的类,并且我想使用条件搜索 Pet,并指定其他宠物中不存在的某些属性。

如何使该操作成为可能?如果我尝试进行搜索,当结果不包含该属性时,引发异常。

最佳答案

由于面向对象编程的工作原理,您要尝试做的事情是不可能的。

class Foo { }
class Bar extends Foo { }

在此示例中, Bar的实例也是 Foo。但是, Foo 的实例不是 Bar。换句话说,父类(super class)对其子类一无所知,而子类却知道其父类(super class)。

回到您的示例,您不能仅通过 prop3属性而不是 prop4访问 PetPet

寻求解决方案

鉴于您的类现状,我同意Shashank Agrawal的解决方案。 SQL(不是HQL或任何其他GORM查询)是通过查询 pet表访问所有属性(实际上是列)的唯一方法。当然,这假设您正在使用默认的逐层表继承。它不适用于每个子类的表继承。

假设按表进行分层,则意味着您已经在 Pet的所有子类中接受可为空的属性。这是一个要求。所以,你可以做的是
  • 放弃子类
  • 将所有属性放入Pet
  • Pet添加属性以指定宠物类型。

  • 注意,这基本上是 table-per-hierarchy在数据库级别已经完成的工作。不同之处在于它不会继承,这使得所有属性都可以从 Pet获得。
    def pets = Pet.withCriteria { eq('prop3', 'whatever') }

    关于grails - Grails:在域类中进行继承搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34860503/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com