在groovy中创建具有外键约束的域类

时间:2011-12-22 03:46:22

标签: grails groovy gorm

您好我正在尝试使用外键约束创建一个域类到另一个现有的域类 新的域类是ArEntitlement,定义如下

package ars
import gra.Resources
class ArEntitlement {
    long id
    String entitlementname
    String entitlementdesc
    String entitlementcomm
    Integer departmentid
    Resources resource
    Integer version

    static belongsto =[resource : Resources]

    static mapping={
    table 'ar_entitlement'
    id(generator:'increment')
    column{
        id(column:'id')
        }
    }
}

资源域类定义如下(之前创建)

package gra
import com.gra.transaction.UserTransaction

class Resources {
    Long id=1
    String resourceName
    Double resourceType
    String resourceOwner
    Double riskScore
    Integer decommissioned
    String resourceClass
    Long resourceSegment
    String targetIp
    String resCriticality
    Long resourceGroup
    Integer disabled

    static hasMany=[userTransactions:UserTransaction]

    static mapping = {
        table 'resource'
        version false
        id(generator:'increment')
                column{
                        id(column:'id') }

    }
    static constraints=
    {
        resourceName(nullable:true,blank:false)
        resourceType(nullable:true,blank:false)
        resourceOwner(nullable:true,blank:false)
        riskScore(nullable:false,blank:false)
        decommissioned(nullable:false,blank:false)
        resourceClass(nullable:false,blank:false)
        resourceSegment(nullable:false,blank:false)
        targetIp(nullable:false,blank:false)
        resCriticality(nullable:true,blank:false)
        resourceGroup(nullable:false,blank:false)
        disabled(nullable:false,blank:false)
    }
}

创建的结果表没有ar_entitlement表到资源表的外键映射,它确实创建了一个名为“resource_id”但没有外键约束的列。 我需要它指向资源表的id列

我尝试了几个选项,没有belongssto说明符,使用hasOne(在两个域类中)但没有获得所需的外键关系。

任何想法这里的问题是什么?

我得到的日志错误是

2011-12-21 19:50:17,258 [main] ERROR hbm2ddl.SchemaUpdate  - Unsuccessful: alter table ar_entitlement add index FKDCD6161FEFD54E5E (resourceid_id), add constraint FKDCD6161FEFD54E5E foreign key (resourceid_id) references resource (id)

1 个答案:

答案 0 :(得分:1)

从ArEntitlement中删除“资源资源”行。

static belongsTo = [resource : Resources]

应该涵盖并且定义两次可能是问题。此外,您不需要指定表名,id生成器或id列,因为您使用的是GORM默认值。尝试删除这些。

以下是修改后的代码......

package ars
import gra.Resources
class ArEntitlement {

    String entitlementname
    String entitlementdesc
    String entitlementcomm
    Integer departmentid
    Integer version

    static belongsTo = [resource : Resources]

    static mapping = {
    }
}