Grails 无法重定向对象[ManageVehicle:(未保存)],该对象不是域或没有标识符。改用显式重定向

Grails 无法重定向对象[ManageVehicle:(未保存)],该对象不是域或没有标识符。改用显式重定向,grails,gorm,grails-domain-class,grails-controller,Grails,Gorm,Grails Domain Class,Grails Controller,这是我的地盘 import org.apache.commons.lang.builder.EqualsBuilder import org.apache.commons.lang.builder.HashCodeBuilder class ManageVehicle implements Serializable { String vehicle Short truckKey=0 Short siteID Integer unitID String w

这是我的地盘

import org.apache.commons.lang.builder.EqualsBuilder
import org.apache.commons.lang.builder.HashCodeBuilder

class ManageVehicle implements Serializable {
    String vehicle
    Short truckKey=0
    Short siteID
    Integer unitID
    String wheelConfig
    String model
    Short period=0
    String usid=UUID.randomUUID().toString()
    //static belongsTo = [wheelConfig : TTType,model:TTModel]
    int hashCode() {
        def builder = new HashCodeBuilder()
        builder.append truckKey
        builder.append siteID
        builder.toHashCode()
    }

    boolean equals(other) {
        if (other == null) return false
        def builder = new EqualsBuilder()
        builder.append truckKey, other.truckKey
        builder.append siteID, other.siteID
        builder.isEquals()
    }

    static mapping = {
        table 'TF_Truck'
        version false
        truckKey column :'TruckKey'
        siteID column :'SiteID'
        id composite:['truckKey','siteID']
        vehicle column: 'TruckID' ,sqlType: 'nvarchar'
        wheelConfig column: 'TypID',sqlType: 'tinyint'
        model column: 'ModID' ,sqlType: 'tinyint'
        unitID column: 'McmID',sqlType: 'tinyint'
        period column: 'Period'
        usid generator: 'assigned', column:'USID', sqlType:'uniqueidentifier'
    }
    static constraints = {
        period nullable: false
        truckKey nullable: false
        siteID nullable: false
    }
}
我在控制器中的保存方法是

def save(ManageVehicle manageVehicleInstance) {
    manageVehicleInstance.siteID=RequestContextHolder.currentRequestAttributes().getAttribute("SiteID",RequestAttributes.SCOPE_SESSION) as Short
    if (manageVehicleInstance == null) {
        notFound()
        return
    }

    if (manageVehicleInstance.hasErrors()) {
        respond manageVehicleInstance.errors, view:'create'
        return
    }

    manageVehicleInstance.save(flush:true,failOnError: true)

    request.withFormat {
        form {
            flash.message = message(code: 'default.created.message', args: [message(code: 'manageVehicle.label', default: 'Manage Vehicle'), manageVehicleInstance.id])
            redirect manageVehicleInstance
        }
        '*' { respond manageVehicleInstance, [status: CREATED] }
    }
}
当我在此域上应用保存操作时,出现以下异常

Message: Cannot redirect for object [ManageVehicle : (unsaved)] it is not a domain or has no identifier. Use an explicit redirect instead 

给我建议一些解决办法

我猜Grails无法在重定向中处理复合id。 我有两个选择来解决这个问题

  • 通过从映射中删除id行,为域类创建id字段
  • 为保存的对象实现自定义重定向,如
    重定向(操作:'show',参数:[truckKey:manageVehicleInstance.truckKey,siteID:manageVehicleInstance.siteID])

  • 和2。选项您可能还必须使用复合id实现自定义对象加载到“显示”操作中,如
    def manageVehicleInstance=ManageVehicle.findByTruckKeyAndSiteID(params.truckKey,params.siteID)

    如果您将控制器代码共享为well@SAGARMANE,我在问题中更新了。重定向manageVehicleInstance是什么意思?我以前从未见过这样的代码。@codehx,所有工作正常的事情就是我无法保存数据。我在域中使用复合键。