当一个引用的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,除了这样的类层次结构的映射之外,我没有想到该模式的正当理由。     

要回复问题请先登录注册