Grails - проблема с вторичным ключом - PullRequest
0 голосов
/ 10 марта 2011

У меня есть сущность с именем OrgUnit, определенная следующим образом

class OrgUnit {

String name
String description
.....
.....
static belongsTo = [workSpace:WorkSpace]
static constraints = {
    //enforce uniqueness of the OrgUnit Name within a WS.
    name(nullable: false, blank: false, unique: 'workSpace')
    address(nullable:true)
    }
...
...

}

В моем классе обслуживания ..

def updateOrgUnit(OrgUnit orgUnit) {
    //The DB query generated by GORM here is wrong...
    OrgUnit mergedOu = OrgUnit.merge(orgUnit);

    try
    {
        if (!mergedOu.save(flush:true)) {
                        mergedOu.errors.allErrors.each{error ->
                        println "An error occured while saving 'orgUnit': ${error}"
                        errorMsg = "Exception occurred while executing updateOrgUnit()";
                    }
        }
    }
    catch (Exception exc)
    {
        exc.printStackTrace();
    }

}

Имя OrgUnit, которое я пытаюсь обновить, изменилось. Похоже, довольно простое обновление, но оно не работает. Причина в том, что в рамках слияния Grails пытается извлечь сущность на основе комбинации «OrgUnit Name + WorkSpace Id», которая является вторичным ключом, а не полем первичного ключа «Id» сущности OrgUnit. И поскольку имя - это одно поле, которое изменяется, сгенерированный запрос не может получить что-либо, фиксация завершается сбоем молча, и я вообще не получаю исключения.

Вот запрос к БД, сгенерированный как часть операции слияния.

select this_.id as id18_0_, this_.version as version18_0_, this_.address_id as address3_18_0_, this_.archive as archive18_0_, this_.name as name18_0_, this_.org_hierarchy_version as org14_18_0_,......this_.type as type18_0_, this_.work_space_id as work19_18_0_, this_.zoom as zoom18_0_ from org_unit this_ where this_.name=? and this_.work_space_id=?

Я не уверен, почему Grails игнорирует первичный ключ и пытается извлечь объект на основе вторичного ключа.

Любые идеи приветствуются.

Спасибо, Кишор

1 Ответ

0 голосов
/ 11 марта 2011

Grails не пытается восстановить это.Это уникальное ограничение - «имя для каждого рабочего пространства» проверяется перед сохранением.

И похоже, что save () завершается неудачно.Это действительно молча терпит неудачу?А как насчет mergedOu.hasErrors ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...