У меня есть два класса домена с двунаправленной ассоциацией один к одному:
Domains
class Nose {
String str1
static belongsTo = [face:Face]
}
class Face {
String str1
static hasOne = [nose: Nose]
}
Контроллеры
class NoseController {
def create() {
nose.properties = params
nose.save(flush: true)
}
def delete() {
def nose = Nose.get(params.id as long)
nose.delete(flush: true)
}
}
class FaceController {
def create() {
def face = new Face()
def nose = Nose.get(params.id as long)
if(!nose){
face.nose = nose
face.properties = params
face.save(flush: true)
nose.face = face
nose.properties = params
nose.save(flush:true)
}else{
face.properties = params
face.save(flush: true)
}
}
def delete() {
def face = Face.get(params.id as long)
face.delete(flush: true)
}
}
После создания Носа и Лица объектов я не могу удалить и обновить их.
Когда я хочу удалить Лицо, я получаю исключение:
org.springframework.dao.DataIntegrityViolationException: внешний ключ
нарушение ограничения пытается удалить teastrelation.Face с идентификатором 1 в
org.grails.hbase.gorm.DeletePersistentMethod.invoke (DeletePersistentMethod.groovy: 66)
в org.grails.hbase.gorm.PersistentMethod $ invoke.call (Неизвестный источник)
at org.grails.hbase.gorm.PersistentMethod $ invoke.call (Неизвестный источник)
Для удаления в FaceController я изменил действие удаления:
def delete() {
def face = Face.get(params.id as long)
def nose = Nose.get(face.nose.id)
face.nose = null
nose.face = null
nose.save(flush:true)
face.save(flush:true)
face.delete(flush: true)
render params.id
}
и только после этого я могу удалить Face объект, но он выдает следующее исключение:
ОШИБКА gorm.SavePersistentMethod - Невозможно получить свойство 'class' в null
object java.lang.NullPointerException: не удается получить свойство 'class' на
нулевой объект в
org.codehaus.groovy.runtime.NullObject.getProperty (NullObject.java:56)
в
org.codehaus.groovy.runtime.InvokerHelper.getProperty (InvokerHelper.java:156)
в
org.codehaus.groovy.runtime.callsite.PojoMetaClassGetPropertySite.callGetProperty (PojoMetaClassGetPropertySite.java:41)
Когда я хочу обновить объект Face, я получаю следующее исключение:
ERROR association.ReferenceTable - Запись справочной таблицы не найдена,
строка = [79, 78, 69, 84, 79, 79, 78, 69, 95, 79, 78, 69, 84, 79, 79, 78,
69, 95, 68, 79, 77, 65, 73, 78, 50, 95, 0, 0, 0, 0, 0, 0, 0, 1]
ОШИБКА gorm.SavePersistentMethod -Не могу получить свойство 'class' в null
object java.lang.NullPointerException: не удается получить свойство 'class' на
нулевой объект
в org.codehaus.groovy.runtime.NullObject.getProperty (NullObject.java:56)
в org.codehaus.groovy.runtime.InvokerHelper.getProperty (InvokerHelper.java:156)
в org.codehaus.groovy.runtime.callsite.PojoMetaClassGetPropertySite.callGetProperty (PojoMetaClassGetPropertySite.java:41)
Я использую Grails 1.3.2 и плагин hbase-0.2.4, и я не могу использовать отображение ..
Что я делаю не так?
Я уже потратил много времени на эту проблему .. пожалуйста, помогите, если кто-нибудь может.