Grails与静态映射表的关系

时间:2010-09-22 13:55:24

标签: grails mapping join gorm

对于我的生活,我似乎无法通过Grails获得与映射表相关的关系。我有两个我想加入的域名,资源和盒式磁带。资源可以有很多盒式磁带。

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

任何明智的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)
     }
}

1 个答案:

答案 0 :(得分:2)

这可能是因为你有:

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

这两个定义相互冲突。 hasMany隐式尝试在您的域中创建名为Set的{​​{1}}(集合),但您已明确将其定义为cassette

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

顺便说一下,你也可以考虑将字段重命名为Cassette cassette,因为它是一个集合,而不是一个单一的对象。

在这些之后,您的域名(关系部分,无论如何)可能如下所示:

cassettes