【问题标题】:How to fix "identifier of an instance of X was altered from 2 to null" in grails如何在grails中修复“X实例的标识符从2更改为null”
【发布时间】:2023-09-11 23:13:01
【问题描述】:

我在 grails 中有两个域类。一个叫做Book,另一个叫做Author。 我的 Book 类看起来像这样,

class Book {
   String name

   static constraints = {
      name nullable:false
   }
}

还有我的作者类:

class Author {
   String name
   Book book1
   Book book2
   Book book3

   static constraints = {
      name nullable:false
      book1 nullable:false
      book2 nullable:true
      book3 nullable:true
   }
}

我用两本书创建了一个作者,然后将其编辑为一本书,我收到以下错误:

identifier of an instance of com.apps.Book was altered from 2 to null

如何解决?我正在使用 grails 2.1.1 和 sql server 2008。

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    尝试在更新方法中将 authorInstance.properties = params 行之前的 book2 和 book3 属性设置为空,如下所示:

    book2 = null
    book3 = null
    
    authorInstance.properties = params
    

    【讨论】:

      【解决方案2】:

      尝试在 Author 类中使用“hasOne”:

      class Author {
         String name
         Book book1, book2, book3
         static hasOne = [ book1:Book, book2:Book, book3:Book ]
      }
      

      【讨论】:

      • 这会影响数据库映射吗?
      • 是的,作者表中将添加 3 列:book1_id 到 book3_id
      • 不能在此处引用非静态的书。 hasOne 是静态的。
      • 您可以在运行时引用这些字段。您还可以将book* 字段定义为通常的属性,以便能够在编译时引用它们。查看更新
      最近更新 更多