Grails gorm улавливает ошибку ограничения внешнего ключа

В Grails я хочу поймать исключение, когда появляется ограничение внешнего ключа, это мой код

    try {
        instance.delete(flush:true)
        flash.message = message(code : "default.deleted.message", args : [instance])
        flash.level = "info"
    } catch(org.springframework.dao.DataIntegrityViolationException | Exception e) {
        flash.message =  message(code : "default.not.deleted.message", args :  [instance])
        flash.level = "danger"
    }

Проблема в том, что при наличии ограничения внешнего ключа он никогда не попадает в блок catch. Любая идея, какое исключение я должен добавить?

Спасибо,


person Dany Y    schedule 22.05.2014    source источник


Ответы (2)


Я использую grails 2.3.5, и у меня работает следующий код

try {
    user.delete(flush: true)
    render "OK"
} catch (org.springframework.dao.DataIntegrityViolationException e) {
    render "DataIntegrityViolationException"
} catch (Throwable v) {
    render "Throwable"
}

Попробуй это..,.

person MKB    schedule 22.05.2014

Я думаю, это потому, что MySQLIntegrityConstraintViolationException вызывается update или insert, а не delete

Exception thrown when an attempt to insert or update data results in violation of an
 integrity constraint. Note that this is not purely a relational concept; unique primary
 keys are required by most database types.

Попробуйте с com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException

ИЗМЕНИТЬ

Какую версию Grails вы используете?

Я обнаружил эту проблему GRAILS-9357.

person Merlin    schedule 22.05.2014
comment
Да ... это проблема в jirra, у вас никогда не будет возможности кэшировать это исключение, это ошибка .. - person Daniel Adenew; 22.05.2014