2016-04-16 2 views
0

У меня есть класс SheetLayout со следующим:GORM не может создать новый объект с помощью AddTo

private String size 
private int xPosition 
private int yPosition 

private Sheet sheet 
private Report report 

static belongsTo=[sheet : Sheet] 

и класс лист со следующим:

@Id 
private String id 

private Date created = new Date() 
private Date modified 
private String title 
private int sheetIndex 
private String type 

private Dashboard dashboard 

static hasMany = [sheetLayouts : SheetLayout, slicersWidgets : SlicerWidget] 

static belongsTo=[dashboard : Dashboard] 

Теперь я пытаюсь сохранить SheetLayout в любом возможный способ (с листом или без него), и он не работает. Один из моих вариантов я пробовал:

def testsl(){ 
     Sheet s = Sheet.findById("AAAAAaaaaaAAAaaaAA") 
     SheetLayout sl = new SheetLayout() 
     sl.setxPosition(0) 
     sl.setyPosition(1) 
     sl.setSize("satas") 
     s.addToSheetLayouts(sl) 
     s.save(flush:true) 

    } 

и это просто не работает :(

любая идея

+0

Вам не нужен личный лист листа, если у вас есть 'static принадлежитTo = [лист: лист]'. Но я не знаю, исправляет ли она проблему. –

+0

Спасибо, что я пытался, но это все еще не помогает. Я думаю, что это потому, что у меня также есть отчет о сущности, который имеет static hasMany = [sheetLayouts: SheetLayout] теперь, когда я пытаюсь сохранить SheetLayout, он не работает, потому что мне нужно иметь значение в report_id в моем объекте SheetLayout. –

+0

Не могли бы вы разместить ошибку stacktrace, если она есть? –

ответ

0

GORM cannot create new entity using addTo

Я не думаю, что это правда следующие работы?.:

Sheet.groovy

class Sheet { 
    // consider using GORM auto timestamp properties for these Dates... 
    Date created 
    Date modified 

    String title 
    int sheetIndex 
    String type 

    static hasMany = [sheetLayouts : SheetLayout] 
} 

SheetLayout.groovy

class SheetLayout { 
    String size 
    int xPosition 
    int yPosition 

    Sheet sheet 

    static belongsTo = [sheet : Sheet] 
} 

Код упорствовать экземпляров:

def now = new Date() 
    Sheet s = new Sheet(created: now, modified: now, title: 'Some Title', sheetIndex: 42, type: 'wilbur') 
    SheetLayout sl = new SheetLayout() 
    sl.setxPosition(0) 
    sl.setyPosition(1) 
    sl.setSize("satas") 
    s.addToSheetLayouts(sl) 
    s.save(flush:true, failOnError: true) 

Вы также могли бы сделать что-то вроде этого:

def now = new Date() 
    Sheet s = new Sheet(created: now, modified: now, title: 'Some Title', sheetIndex: 42, type: 'wilbur') 
    s.addToSheetLayouts(xPosition: 0, yPosition: 1, size: 'satas') 
    s.save(flush:true, failOnError: true) 

Я предлагаю вам проверить errors свойство после попытки сохранить экземпляр и/или использовать failOnError:true.

EDIT:

Я только что перечитал ваш пример, и это выглядит как ваш SheetLayout класс имеет report свойство, что вы не инициализации. Если вы не настроили это с помощью nullable: true, это будет частью вашей проблемы.

Смежные вопросы