【问题标题】:How to model composite key in legacy database in grails如何在 Grails 中对遗留数据库中的复合键进行建模
【发布时间】:2012-12-11 09:34:30
【问题描述】:

如何在 Grails 中对遗留数据库中的复合键进行建模

我有一个旧数据库,其中包含由 Grails 域对象建模的三个表

class Foo {

    static hasMany = [bars: Bar]

    static mapping = {
        version false

        columns {
            id column: "FooId"
            fooProp column: "FooProp"           
        }
    }
}

class Bar implements Serializable{

    Baz baz

    static hasMany = [foos: Foo]

    static belongsTo = [Foo]

    static mapping = {
        version false

        columns {
            id composite: ["FooId", "BazId"]
            baz column: "BazId"
            barProp column: "BarProp"
        }
    }
}

class Baz {

    static hasMany = [bars: Bar]

    static mapping = {
        version false

        columns {
            id column: "BazId"
            bazProp column: "BazProp"
        }
    }
}

但是当我尝试部署它时,我得到以下异常

原因:org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的bean时出错:设置bean属性“sessionFactory”时无法解析对bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.hibernate.HibernateException: Missing column: id in app.Bar

我宁愿没有复合键,但我有严格的命令不要接触数据库,所以现在我正在尽我最大的努力对其建模,但复合键已被证明有些困难......

【问题讨论】:

  • 我很确定您需要将 FooId 和 BazId 定义为 Bar 类中的属性。请参阅 grails 文档第 6.5.2.5 节,您将在其中看到它将 firstName 和 lastName 定义为字符串,然后为复合键引用它们。您正在定义两个未定义为复合键的字段。 grails.org/doc/latest/guide/single.html#identity

标签: grails-orm grails-2.0


【解决方案1】:

这个帖子很有用

Dynamic finders with Grails many-to-many relationship

我遇到了同样的问题。 这对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多