【发布时间】: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