保存相关域类Grails的(Saving associated domain classes in

2019-10-16 16:01发布

我竭力要得到正确的Grails的关联。 比方说,我有两个领域类:

class Engine {
    String name
    int numberOfCylinders = 4
    static constraints = {
        name(blank:false, nullable:false)
        numberOfCylinders(range:4..8)
    }
}

class Car {
    int year
    String brand
    Engine engine = new Engine(name:"Default Engine")
    static constraints = {
        engine(nullable:false)
        brand(blank:false, nullable:false)
        year(nullable:false)
    }
}

这个想法是,用户无需先创建引擎打造的汽车,这些汽车得到了默认引擎。 在CarController我有:

def save = {
    def car = new Car(params)
    if(!car.hasErrors() && car.save()){
        flash.message = "Car saved"
        redirect(action:index)
    }else{
        render(view:'create', model:[car:car])
    }
}

当试图挽救,我上Car.engine字段为空值异常,所以显然不是创建的默认引擎和保存。 我试图手动创建引擎:

def save = {
    def car = new Car(params)
    car.engine = new Engine(name: "Default Engine")
    if(!car.hasErrors() && car.save()){
        flash.message = "Car saved"
        redirect(action:index)
    }else{
        render(view:'create', model:[car:car])
    }
}

没有任何工作。 是的Grails无法保存相关的类? 我怎么能实现这样的功能?

Answer 1:

我想你需要一个属于关联在你的引擎,即

static belongsTo = [car:Car]

希望这可以帮助。



Answer 2:

对于什么是值得,我终于揭穿它。

该例外,我试图挽救汽车是,当有

非空属性引用null或瞬时值

很明显,当试图挽救,但为什么发动机为空? 原来你要做的:

def car = new Car(params)
car.engine = new Engine(name: "Default Engine")
car.engine.save()

由于发动机不属于轿车,你没有得到级联保存/更新/删除这是在我的情况很好。 解决的办法是手动保存引擎,然后救车。



文章来源: Saving associated domain classes in Grails