如何解决当一个引用的pk引用另一个引用的pk时,如何映射GORM中的实体
|| 当一个表的主键也是另一个表的外键时,在GORM中映射两个实体的最佳方法是什么。例如: 这是一张桌子:CREATE TABLE `table_a` (
`a_id` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`a_id`)
)
下表引用了该表“ a_id”的pk:
CREATE TABLE `table_b` (
`b_id` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`b_id`),KEY `b_id_fk` (`b_id`),CONSTRAINT `b_id_fk` FOREIGN KEY (`b_id`) REFERENCES `table_a\' (`a_id`)
)
如何在Grails / GORM中映射以上两个实体?由于GORM会抛出异常“实体映射中的重复列”,因此以下代码显然不起作用。
class TableB {
TableA tableA
static belongsTo = [TableA]
static mapping = {
id column:\"b_id\"
version false
tableA column:\"b_id\"
}
static constraints = {
tableA unique: true
}
}
注意:我使用的是grails 1.3.7,但如果此问题是最近已解决的问题,则可以切换到较新的版本。请告诉我。
解决方法
我不知道它是否适用于您的情况,但是您可以做的一件事是使用每个子类的继承策略将
TableB
映射为TableA
的子类。检查Grails指南中的继承策略。
因此,您将拥有:
class TableA {
static mapping = {
id column: \'a_id\'
table \'table_a\'
version false
tablePerHierarchy false
}
}
class TableB extends TableA {
static mapping = {
id column: \'b_id\'
table \'table_b\'
version false
}
}
这种方法的问题是创建了TableA
对象后就无法创建TableB
对象。 Hibernate的工作方式是,在创建新的TableA
实例时,会在table_a
中创建一条记录。创建新的“ 3”实例时,将同时创建“ 9”中的记录和“ 12”中的记录。
OTOH,除了这样的类层次结构的映射之外,我没有想到该模式的正当理由。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。