Создание классов доменов с ограничениями внешнего ключа в groovy - PullRequest
0 голосов
/ 22 декабря 2011

Привет. Я пытаюсь создать класс домена с ограничением внешнего ключа для другого существующего класса домена. Новый класс домена - 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', но без ограничения внешнего ключа. Мне нужно, чтобы он указывал на столбец идентификатора таблицы ресурсов

Я пробовал несколько вариантов, не имея спецификатора ownsto, используя 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 Ответ

1 голос
/ 22 декабря 2011

Удалить строку «Ресурсный ресурс» из ArEntitlement.

static belongsTo = [resource : Resources]

Может быть, проблема должна охватить это и определить его дважды. Кроме того, вам не нужно указывать имена таблиц, генератор идентификаторов или столбец идентификаторов, так как кажется, что вы используете значения по умолчанию GORM. Попробуйте также удалить их.

Вот модифицированный код ...

package ars
import gra.Resources
class ArEntitlement {

    String entitlementname
    String entitlementdesc
    String entitlementcomm
    Integer departmentid
    Integer version

    static belongsTo = [resource : Resources]

    static mapping = {
    }
}
...