在Grails 3中设置JoinTable时遇到问题。
我有两个相互之间具有多对多关系的 Realm 类(A和B)。在Grails 3中,我使用JoinTable映射定义了域。在数据库(MySql v5)中,我有三个表A,B和联接表A_B。 B表使用“varchar”作为主键sqlType。表A使用“int”作为主键sqlType。
我在数据库中添加了A和B以及联接表中的条目,以将两者链接在一起。
在我的测试代码中,当我尝试加载A的实例A.get(id)时,出现错误,指示JoinTable中ForeignKey的类型未知。
Domain A:
static hasMany = [bs: B]
static mapping = {
table "A"
id column: 'id', sqlType: 'int'
bs joinTable: [name: "A_B", key: "a_id"]
}
Domain B:
static hasMany = [as: A]
static mapping = {
table "B"
id column: 'id', sqlType: 'varchar'
as joinTable: [name: "A_B", key: "b_id"]
}
因此,似乎B中的“varchar”或联接表中B的foreignKey被解释为Long。
我可以通过为JoinTable添加第三个域并定义列来解决该问题。
Domain AB
Long aId
String bId
static mapping = {
table "A_B"
id composite: ['aId', 'bId']
aId column: 'a_id', sqlType: 'int'
bId column: "b_id", sqlType: 'varchar'
}
似乎我应该能够在Grails 3中建立JoinTable,而不必将JoinTable定义为域。有谁知道如何做到这一点?
最佳答案
好,我解决了这个问题。这是我的疏忽。
只需在域B中定义“id”类型,例如
Domain B:
String id // <= Declare the id.
static hasMany = [as: A]
static mapping = {
table "B"
id column: 'id', sqlType: 'varchar'
as joinTable: [name: "A_B", key: "b_id"]
}
关于grails - 如何使用String外键映射joinTable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55384037/