IT序号网

Grails 与静态映射表的关系

lxf 2026年09月08日 编程语言 124 0

在我的一生中,我似乎无法使用 Grails 在映射表上建立关系。我有两个要加入的域,Resources 和 Cassettes。一个 Resource 可以有许多 Cassettes。

如果我使用脚手架运行下面的代码,我会收到错误“'字段列表'中的未知列'this_.cassette_id'”。如果我尝试在映射中定义cassette_id,我会在编译时遇到 fatal error 。

任何明智的 Grails 向导都可以让我走上正确的道路吗?我对此并不陌生,并且已经尝试了几乎所有我能找到的方法来使其有效。

//resource definition 
 
package edu.place.project 
 
class Resource { 
    String title 
    String number 
    String type 
    Cassette cassette 
 
    static hasMany  = [cassette : Cassette ] 
 
    static mappedBy = [cassette : "hvt"] 
 
    static mapping = { 
            table "Resources" 
    version false 
            columns { 
                    id column : "resourceIdentifier2" 
                    title column: "title" 
                    number column: "extentNumber" 
                    type column: "extentType" 
            }   
    } 
 
    static constraints = { 
    } 
} 
 
//Cassette definition 
 
package edu.place.project 
 
class Cassette { 
    String id 
    String type 
    String numCode 
    String hvt 
 
    static belongsTo = Resource 
 
    static mapping = { 
            table "ArchDescriptionInstances" 
            version false 
            columns { 
                    id column : "barcode", type : String 
                    type column : "userDefinedString2" 
                    numCode column : "container1AlphaNumIndicator" 
                    hvt column : "userDefinedString1" 
            } 
    } 
 
     static constraints = { 
            barcode(unique : true) 
     } 
} 

请您参考如下方法:

这可能是因为你有:

class Resource { 
    Cassette cassette 
    static hasMany = [cassette: Cassette] 
} 

这两个定义相互冲突。 hasMany隐式尝试创建一个 Set (收藏)叫 cassette在您的域上,但您已明确将其定义为 Cassette .

尝试删除 Cassette cassette看看会发生什么。我认为您描述的模型不需要它。

顺便说一句,您还可以考虑将字段重命名为 cassettes因为它是一个集合,而不是一个单一的对象。

在这些之后,您的域(无论如何,关系部分)可能如下所示:
class Resource { 
    static hasMany = [cassettes: Cassette] 
} 
 
class Cassette { 
    Resource resource 
    static belongsTo = Resource 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!