GORM,继承模型,递归链接

发布于 2024-12-14 18:19:48 字数 592 浏览 2 评论 0原文

假设我们有书籍

class Book {

   String title
   String type="Book"
   String author
   Book parentBook // <----<<<
   //...
}

,并且我们将书籍扩展为其他类型,

 class ReferenceBook extends Book {

    String type="RefBook"

    void setParentBook(Book b) {
       if ((b && b.type) && (b.type=="RefBook")) {
          parentBook = b
       } else {
          parentBook = null
       }
    }
 }

当我这样做时,在尝试为 ReferenceBook 设置parentBook 时,我收到 java.lang.reflect.InitationTargetException 。

我知道我在这里错过了一些东西......

Assuming that we have books

class Book {

   String title
   String type="Book"
   String author
   Book parentBook // <----<<<
   //...
}

and we extend books to other types

 class ReferenceBook extends Book {

    String type="RefBook"

    void setParentBook(Book b) {
       if ((b && b.type) && (b.type=="RefBook")) {
          parentBook = b
       } else {
          parentBook = null
       }
    }
 }

When I do this I get a java.lang.reflect.InvocationTargetException when attempting to set a parentBook for ReferenceBook.

I know I'm missing something here...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神经暖 2024-12-21 18:19:51

使用鉴别器功能:

  class Book {
   String title
   String author
   Book parentBook // <----<<<
   //...
   static mapping = {
     tablePerHierarchy false
     discriminator column:[name:"discriminator", length:200, value:'Book']
   }
  }

class ReferenceBook extends Book {
  //...
  static mapping = {
    discriminator column:[value:'RefBook']
  }
  void setParentBook(Book b) {
    parentBook = ('RefBook' == b?.properties['class']) ? b : null
  }

}

use discriminator feature:

  class Book {
   String title
   String author
   Book parentBook // <----<<<
   //...
   static mapping = {
     tablePerHierarchy false
     discriminator column:[name:"discriminator", length:200, value:'Book']
   }
  }

class ReferenceBook extends Book {
  //...
  static mapping = {
    discriminator column:[value:'RefBook']
  }
  void setParentBook(Book b) {
    parentBook = ('RefBook' == b?.properties['class']) ? b : null
  }

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文